Chromium Code Reviews| Index: pkg/compiler/lib/src/js_backend/codegen/unsugar.dart |
| diff --git a/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart b/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart |
| index aa560120245f4bb17de3819344670be71add2986..688d3f319d6108acf6db8f744ce04cafe91a7bea 100644 |
| --- a/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart |
| +++ b/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart |
| @@ -6,9 +6,9 @@ import '../../cps_ir/cps_ir_nodes.dart'; |
| import '../../cps_ir/optimizers.dart'; |
| import '../../constants/expressions.dart'; |
| import '../../constants/values.dart'; |
| -import '../../elements/elements.dart' show ClassElement, FieldElement; |
| +import '../../elements/elements.dart' show ClassElement, FieldElement, Element; |
| import '../../js_backend/codegen/glue.dart'; |
| -import '../../dart2jslib.dart' show Selector; |
| +import '../../dart2jslib.dart' show Selector, World; |
| /// Rewrites the initial CPS IR to make Dart semantics explicit and inserts |
| /// special nodes that respect JavaScript behavior. |
| @@ -49,21 +49,22 @@ class UnsugarVisitor extends RecursiveVisitor { |
| processInvokeMethod(InvokeMethod node) { |
| Selector selector = node.selector; |
| + // TODO(karlklose): should we rewrite all selectors? |
|
asgerf
2015/01/21 14:03:39
I'm a bit torn on this, but I lean toward yes.
Js
|
| if (!_glue.isInterceptedSelector(selector)) return; |
| - if (!selector.isCall && !selector.isOperator) { |
| - // TODO(karlklose): handle special selectors. |
| - return; |
| - } |
| - |
| + Primitive receiver = node.receiver.definition; |
| Set<ClassElement> interceptedClasses = |
| _glue.getInterceptedClassesOn(selector); |
| _glue.registerSpecializedGetInterceptor(interceptedClasses); |
| - Primitive receiver = node.receiver.definition; |
| Primitive intercepted = new Interceptor(receiver, interceptedClasses); |
| insertLetPrim(intercepted, node); |
| node.arguments.insert(0, node.receiver); |
| + node.selector = new JsCallSelector( |
| + selector, |
| + _glue.invocationName(selector), |
| + selector.positionalArgumentCount, |
| + selector.namedArguments); |
| node.receiver = new Reference<Primitive>(intercepted); |
| } |