Index: sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart b/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart |
index 0055ba20eda2dcdff45a57b3409f83b7ce296973..4a1ed62c1adb197d128aefa225b47da5c5fe0607 100644 |
--- a/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart |
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart |
@@ -89,11 +89,6 @@ class CodeEmitterTask extends CompilerTask { |
return constantEmitter.initializationExpression(value); |
} |
- // Deprecated. Remove after last use is converted to JS ASTs. |
- void writeConstantToBuffer(Constant value, CodeBuffer buffer) { |
- buffer.add(js.prettyPrint(constantReference(value), compiler)); |
- } |
- |
String get name => 'CodeEmitter'; |
String get defineClassName |
@@ -404,8 +399,6 @@ $lazyInitializerLogic |
selector); |
if (alreadyGenerated.contains(invocationName)) return; |
alreadyGenerated.add(invocationName); |
- CodeBuffer buffer = new CodeBuffer(); |
- buffer.add('function('); |
JavaScriptBackend backend = compiler.backend; |
bool isInterceptorClass = |
@@ -420,17 +413,17 @@ $lazyInitializerLogic |
String receiverArgumentName = r'$receiver'; |
// The parameters that this stub takes. |
- List<String> parametersBuffer = |
- new List<String>(selector.argumentCount + extraArgumentCount); |
+ List<js.Parameter> parametersBuffer = |
+ new List<js.Parameter>(selector.argumentCount + extraArgumentCount); |
// The arguments that will be passed to the real method. |
- List<String> argumentsBuffer = |
- new List<String>(parameters.parameterCount + extraArgumentCount); |
+ List<js.Expression> argumentsBuffer = |
+ new List<js.Expression>(parameters.parameterCount + extraArgumentCount); |
int count = 0; |
if (isInterceptorClass) { |
count++; |
- parametersBuffer[0] = receiverArgumentName; |
- argumentsBuffer[0] = receiverArgumentName; |
+ parametersBuffer[0] = new js.Parameter(receiverArgumentName); |
+ argumentsBuffer[0] = new js.VariableUse(receiverArgumentName); |
} |
int indexOfLastOptionalArgumentInParameters = positionalArgumentCount - 1; |
@@ -441,51 +434,54 @@ $lazyInitializerLogic |
String jsName = JsNames.getValid(element.name.slowToString()); |
assert(jsName != receiverArgumentName); |
if (count < positionalArgumentCount + extraArgumentCount) { |
- parametersBuffer[count] = jsName; |
- argumentsBuffer[count] = jsName; |
+ parametersBuffer[count] = new js.Parameter(jsName); |
+ argumentsBuffer[count] = new js.VariableUse(jsName); |
} else { |
int index = names.indexOf(element.name); |
if (index != -1) { |
indexOfLastOptionalArgumentInParameters = count; |
// The order of the named arguments is not the same as the |
// one in the real method (which is in Dart source order). |
- argumentsBuffer[count] = jsName; |
- parametersBuffer[selector.positionalArgumentCount + index] = jsName; |
- // Note that [elements] may be null for a synthetized [member]. |
+ argumentsBuffer[count] = new js.VariableUse(jsName); |
+ parametersBuffer[selector.positionalArgumentCount + index] = |
+ new js.Parameter(jsName); |
+ // Note that [elements] may be null for a synthesized [member]. |
} else if (elements != null && elements.isParameterChecked(element)) { |
- CodeBuffer argumentBuffer = new CodeBuffer(); |
- writeConstantToBuffer(SentinelConstant.SENTINEL, argumentBuffer); |
- argumentsBuffer[count] = argumentBuffer.toString(); |
+ argumentsBuffer[count] = constantReference(SentinelConstant.SENTINEL); |
} else { |
Constant value = handler.initialVariableValues[element]; |
if (value == null) { |
- argumentsBuffer[count] = NullConstant.JsNull; |
+ argumentsBuffer[count] = constantReference(new NullConstant()); |
} else { |
if (!value.isNull()) { |
// If the value is the null constant, we should not pass it |
// down to the native method. |
indexOfLastOptionalArgumentInParameters = count; |
} |
- CodeBuffer argumentBuffer = new CodeBuffer(); |
- writeConstantToBuffer(value, argumentBuffer); |
- argumentsBuffer[count] = argumentBuffer.toString(); |
+ argumentsBuffer[count] = constantReference(value); |
} |
} |
} |
count++; |
}); |
- String parametersString = Strings.join(parametersBuffer, ","); |
- buffer.add('$parametersString) {\n'); |
+ List<js.Statement> body; |
if (member.isNative()) { |
- nativeEmitter.generateParameterStub( |
- member, invocationName, parametersString, argumentsBuffer, |
- indexOfLastOptionalArgumentInParameters, buffer); |
+ body = nativeEmitter.generateParameterStubStatements( |
+ member, invocationName, parametersBuffer, argumentsBuffer, |
+ indexOfLastOptionalArgumentInParameters); |
} else { |
- String arguments = Strings.join(argumentsBuffer, ","); |
- buffer.add(' return this.${namer.getName(member)}($arguments)'); |
+ body = <js.Statement>[ |
+ new js.Return( |
+ new js.VariableUse('this') |
+ .dot(namer.getName(member)) |
+ .callWith(argumentsBuffer))]; |
} |
- buffer.add('\n}'); |
+ |
+ js.Fun function = new js.Fun(parametersBuffer, new js.Block(body)); |
+ |
+ CodeBuffer buffer = new CodeBuffer(); |
+ buffer.add(js.prettyPrint(function, compiler)); |
defineInstanceMember(invocationName, buffer); |
} |