| Index: sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart
|
| index 6866b254348c46b31d8d3432935bfee756289371..52284600962a8bf3694d1ff7340d890fe107884c 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/js_backend/native_emitter.dart
|
| @@ -54,9 +54,9 @@ class NativeEmitter {
|
| return backend.namer.isolateAccess(element);
|
| }
|
|
|
| - String get defPropName {
|
| + jsAst.Expression get defPropFunction {
|
| Element element = compiler.findHelper('defineProperty');
|
| - return backend.namer.isolateAccess(element);
|
| + return backend.namer.elementAccess(element);
|
| }
|
|
|
| String get toStringHelperName {
|
| @@ -355,9 +355,7 @@ class NativeEmitter {
|
| FunctionSignature parameters = member.functionSignature;
|
| Element converter =
|
| compiler.findHelper('convertDartClosureToJS');
|
| - String closureConverter = backend.namer.isolateAccess(converter);
|
| - Set<String> stubParameterNames = new Set<String>.from(
|
| - stubParameters.map((param) => param.name));
|
| + jsAst.Expression closureConverter = backend.namer.elementAccess(converter);
|
| parameters.forEachParameter((ParameterElement parameter) {
|
| String name = parameter.name;
|
| // If [name] is not in [stubParameters], then the parameter is an optional
|
| @@ -371,7 +369,8 @@ class NativeEmitter {
|
| FunctionType functionType = type;
|
| int arity = functionType.computeArity();
|
| statements.add(
|
| - js('$name = $closureConverter($name, $arity)').toStatement());
|
| + js.statement('# = #(#, $arity)',
|
| + [name, closureConverter, name]));
|
| break;
|
| }
|
| }
|
| @@ -418,7 +417,8 @@ class NativeEmitter {
|
| arguments = argumentsBuffer.sublist(0,
|
| indexOfLastOptionalArgumentInParameters + 1);
|
| }
|
| - statements.add(new jsAst.Return(receiver[target](arguments)));
|
| + statements.add(
|
| + js.statement('return #.#(#)', [receiver, target, arguments]));
|
|
|
| return statements;
|
| }
|
| @@ -477,17 +477,13 @@ class NativeEmitter {
|
| // If we have any properties to add to Object.prototype, we run
|
| // through them and add them using defineProperty.
|
| if (!objectProperties.isEmpty) {
|
| - jsAst.Expression init =
|
| - js.fun(['table'],
|
| - new jsAst.ForIn(
|
| - new jsAst.VariableDeclarationList(
|
| - [new jsAst.VariableInitialization(
|
| - new jsAst.VariableDeclaration('key'),
|
| - null)]),
|
| - js('table'),
|
| - new jsAst.ExpressionStatement(
|
| - js('$defPropName(Object.prototype, key, table[key])'))))(
|
| - new jsAst.ObjectInitializer(objectProperties));
|
| + jsAst.Expression init = js(r'''
|
| + (function(table) {
|
| + for(var key in table)
|
| + #(Object.prototype, key, table[key]);
|
| + })(#)''',
|
| + [ defPropFunction,
|
| + new jsAst.ObjectInitializer(objectProperties)]);
|
|
|
| if (emitter.compiler.enableMinification) targetBuffer.add(';');
|
| targetBuffer.add(jsAst.prettyPrint(
|
|
|