diff --git a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart index aabb7a3f1b3..b852418c70e 100644 --- a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart +++ b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart @@ -156,8 +156,11 @@ class CodeGenerator extends tree_ir.StatementVisitor return name; } - List visitArguments(List arguments) { - return arguments.map(visitExpression).toList(); + List visitExpressionList( + List expressions) { + return new List.generate(expressions.length, + (int index) => visitExpression(expressions[index]), + growable: false); } giveup(tree_ir.Node node, @@ -242,7 +245,7 @@ class CodeGenerator extends tree_ir.StatementVisitor registry.registerInstantiatedType(node.type); Selector selector = node.selector; FunctionElement target = node.target; - List arguments = visitArguments(node.arguments); + List arguments = visitExpressionList(node.arguments); return buildStaticInvoke(selector, target, arguments); } @@ -269,7 +272,7 @@ class CodeGenerator extends tree_ir.StatementVisitor registerMethodInvoke(node); return js.propertyCall(visitExpression(node.receiver), glue.invocationName(node.selector), - visitArguments(node.arguments)); + visitExpressionList(node.arguments)); } @override @@ -277,7 +280,7 @@ class CodeGenerator extends tree_ir.StatementVisitor Selector selector = node.selector; assert(selector.isGetter || selector.isSetter || selector.isCall); FunctionElement target = node.target; - List arguments = visitArguments(node.arguments); + List arguments = visitExpressionList(node.arguments); return buildStaticInvoke(selector, target, arguments, sourceInformation: node.sourceInformation); } @@ -291,19 +294,19 @@ class CodeGenerator extends tree_ir.StatementVisitor return js.js('#.#(#)', [visitExpression(node.receiver), glue.instanceMethodName(node.target), - visitArguments(node.arguments)]); + visitExpressionList(node.arguments)]); } return js.js('#.#.call(#, #)', [glue.prototypeAccess(node.target.enclosingClass), glue.invocationName(node.selector), visitExpression(node.receiver), - visitArguments(node.arguments)]); + visitExpressionList(node.arguments)]); } @override js.Expression visitLiteralList(tree_ir.LiteralList node) { registry.registerInstantiatedClass(glue.listClass); - List entries = node.values.map(visitExpression).toList(); + List entries = visitExpressionList(node.values); return new js.ArrayInitializer(entries); } @@ -351,8 +354,7 @@ class CodeGenerator extends tree_ir.StatementVisitor @override js.Expression visitTypeOperator(tree_ir.TypeOperator node) { js.Expression value = visitExpression(node.value); - List typeArguments = - node.typeArguments.map(visitExpression).toList(); + List typeArguments = visitExpressionList(node.typeArguments); if (!node.isTypeTest) { giveup(node, 'type casts not implemented.'); } @@ -557,7 +559,7 @@ class CodeGenerator extends tree_ir.StatementVisitor @override js.Expression visitCreateBox(tree_ir.CreateBox node) { - return new js.ObjectInitializer([]); + return new js.ObjectInitializer(const []); } @override @@ -570,7 +572,7 @@ class CodeGenerator extends tree_ir.StatementVisitor registry.registerInstantiatedClass(cls); js.Expression instance = new js.New( glue.constructorAccess(cls), - node.arguments.map(visitExpression).toList()); + visitExpressionList(node.arguments)); List typeInformation = node.typeInformation; assert(typeInformation.isEmpty || @@ -578,7 +580,7 @@ class CodeGenerator extends tree_ir.StatementVisitor if (typeInformation.isNotEmpty) { FunctionElement helper = glue.getAddRuntimeTypeInformation(); js.Expression typeArguments = new js.ArrayInitializer( - typeInformation.map(visitExpression).toList()); + visitExpressionList(typeInformation)); return buildStaticHelperInvocation(helper, [instance, typeArguments]); } else { @@ -593,9 +595,9 @@ class CodeGenerator extends tree_ir.StatementVisitor js.Expression internalName = js.string(glue.invocationName(node.selector)); js.Expression kind = js.number(node.selector.invocationMirrorKind); js.Expression arguments = new js.ArrayInitializer( - node.arguments.map(visitExpression).toList()); + visitExpressionList(node.arguments)); js.Expression argumentNames = new js.ArrayInitializer( - node.selector.namedArguments.map(js.string).toList()); + node.selector.namedArguments.map(js.string).toList(growable: false)); return buildStaticHelperInvocation(glue.createInvocationMirrorMethod, [name, internalName, kind, arguments, argumentNames]); } @@ -628,7 +630,8 @@ class CodeGenerator extends tree_ir.StatementVisitor // Read a lazily initialized field. registry.registerStaticUse(node.element.declaration); js.Expression getter = glue.isolateLazyInitializerAccess(node.element); - return new js.Call(getter, [], sourceInformation: node.sourceInformation); + return new js.Call(getter, [], + sourceInformation: node.sourceInformation); } // Read an eagerly initialized field. registry.registerStaticUse(node.element.declaration); @@ -678,8 +681,7 @@ class CodeGenerator extends tree_ir.StatementVisitor @override js.Expression visitTypeExpression(tree_ir.TypeExpression node) { - List arguments = - node.arguments.map(visitExpression).toList(growable: false); + List arguments = visitExpressionList(node.arguments); return glue.generateTypeRepresentation(node.dartType, arguments); }