Chromium Code Reviews| Index: pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
| diff --git a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
| index ec9ff8d303853f0cc3b7d224b10b80ae76237691..e6638ba83f4e6693390f3f1f800a7da51914d4e7 100644 |
| --- a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
| +++ b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
| @@ -168,13 +168,13 @@ class CodeGenerator extends tree_ir.Visitor<dynamic, js.Expression> { |
| js.Expression buildStaticInvoke(Selector selector, |
| Element target, |
| - List<tree_ir.Expression> arguments) { |
| + List<js.Expression> arguments) { |
| registry.registerStaticInvocation(target.declaration); |
| js.Expression elementAccess = glue.elementAccess(target); |
| List<js.Expression> compiledArguments = |
| - selector.makeArgumentsList(arguments, target.implementation, |
| - visitExpression, |
| + selector.makeArgumentsList(target.implementation, |
| + arguments, |
|
floitsch
2014/11/28 09:37:03
nit: I prefer to align them with the first argumen
sigurdm
2014/11/28 12:03:54
Done.
|
| compileConstant); |
| return new js.Call(elementAccess, compiledArguments); |
| } |
| @@ -182,7 +182,9 @@ class CodeGenerator extends tree_ir.Visitor<dynamic, js.Expression> { |
| @override |
| js.Expression visitInvokeConstructor(tree_ir.InvokeConstructor node) { |
| if (node.constant != null) return giveup(node); |
| - return buildStaticInvoke(node.selector, node.target, node.arguments); |
| + return buildStaticInvoke(node.selector, |
| + node.target, |
| + visitArguments(node.arguments)); |
| } |
| void registerMethodInvoke(tree_ir.InvokeMethod node) { |
| @@ -209,7 +211,9 @@ class CodeGenerator extends tree_ir.Visitor<dynamic, js.Expression> { |
| @override |
| js.Expression visitInvokeStatic(tree_ir.InvokeStatic node) { |
| - return buildStaticInvoke(node.selector, node.target, node.arguments); |
| + return buildStaticInvoke(node.selector, |
| + node.target, |
| + visitArguments(node.arguments)); |
| } |
| @override |
| @@ -229,8 +233,28 @@ class CodeGenerator extends tree_ir.Visitor<dynamic, js.Expression> { |
| @override |
| js.Expression visitLiteralMap(tree_ir.LiteralMap node) { |
| - return giveup(node); |
| - // TODO: implement visitLiteralMap |
| + ConstructorElement constructor; |
| + if (node.entries.isEmpty) { |
| + constructor = glue.mapLiteralConstructorEmpty; |
| + } else { |
| + constructor = glue.mapLiteralConstructor; |
| + } |
| + List<js.ArrayElement> entries = |
| + new List<js.ArrayElement>(2 * node.entries.length); |
| + for (int i = 0; i < node.entries.length; i++) { |
| + entries[2 * i] = |
|
floitsch
2014/11/28 09:37:03
Nit...
js.Expression key = visitExpression(node.en
sigurdm
2014/11/28 12:03:54
Done
|
| + new js.ArrayElement(2 * i, visitExpression(node.entries[i].key)); |
| + entries[2 * i + 1] = |
| + new js.ArrayElement(2 * i + 1, |
| + visitExpression(node.entries[i].value)); |
| + } |
| + List<js.Expression> args = |
| + <js.Expression>[new js.ArrayInitializer(node.entries.length * 2, |
| + entries)]; |
| + return buildStaticInvoke( |
| + new Selector.call(constructor.name, constructor.library, 2), |
| + constructor, |
| + args); |
| } |
| @override |