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 67203061c4ba74b5f07c55a903933888fc4232bf..546b75aa6b02638f59c4c6f65e90e42deba7b9e8 100644 |
| --- a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
| +++ b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
| @@ -185,10 +185,33 @@ class CodeGenerator extends tree_ir.Visitor<dynamic, js.Expression> { |
| return buildStaticInvoke(node.selector, node.target, node.arguments); |
| } |
| + void registerMethodInvoke(tree_ir.InvokeMethod node) { |
| + Selector selector = node.selector; |
| + // TODO(sigurdm): We should find a better place to register the call. |
| + Selector call = new Selector.callClosureFrom(selector); |
| + registry.registerDynamicInvocation(call); |
| + registry.registerDynamicInvocation(selector); |
| + } |
| + |
| @override |
| js.Expression visitInvokeMethod(tree_ir.InvokeMethod node) { |
| - return giveup(node); |
| - // TODO: implement visitInvokeMethod |
| + // TODO(sigurdm): Handle intercepted invocations. |
| + if (glue.isIntercepted(node.selector)) giveup(node); |
| + js.Expression receiver = visitExpression(node.receiver); |
| + |
| + List<js.Expression> arguments = visitArguments(node.arguments); |
| + |
| + String methodName = glue.invocationName(node.selector); |
| + registerMethodInvoke(node); |
| + |
| + return jsPropertyCall(receiver, methodName, arguments); |
| + } |
| + |
| + js.Call jsPropertyCall(js.Expression receiver, |
|
floitsch
2014/11/27 13:20:12
Maybe move this to the js-builder?
or as a named c
sigurdm
2014/11/27 14:31:18
Done.
|
| + String fieldName, |
| + List<js.Expression> arguments) { |
| + return new js.Call(new js.PropertyAccess.field(receiver, fieldName), |
| + arguments); |
| } |
| @override |