Index: lib/compiler/implementation/ssa/builder.dart |
diff --git a/lib/compiler/implementation/ssa/builder.dart b/lib/compiler/implementation/ssa/builder.dart |
index 88fe78a9c3c8ba3babd8b7ac489b69eb57eb92fa..b148795f42c0c39f5647625173f9b013093ffdc4 100644 |
--- a/lib/compiler/implementation/ssa/builder.dart |
+++ b/lib/compiler/implementation/ssa/builder.dart |
@@ -2373,39 +2373,25 @@ class SsaBuilder implements Visitor { |
} |
visitSend(Send node) { |
- if (node.isSuperCall) { |
- if (node.isPropertyAccess) { |
- compiler.unimplemented('super property read', node: node); |
- } |
- visitSuperSend(node); |
- } else if (node.isOperator && methodInterceptionEnabled) { |
- visitOperatorSend(node); |
- } else if (node.isPropertyAccess) { |
- generateGetter(node, elements[node]); |
- } else if (Elements.isClosureSend(node, elements)) { |
- visitClosureSend(node); |
- } else { |
- Element element = elements[node]; |
- if (element === null) { |
- // Example: f() with 'f' unbound. |
- // This can only happen inside an instance method. |
- visitDynamicSend(node); |
- } else if (element.kind == ElementKind.CLASS) { |
- compiler.internalError("Cannot generate code for send", node: node); |
- } else if (element.isInstanceMember()) { |
- // Example: f() with 'f' bound to instance method. |
- visitDynamicSend(node); |
- } else if (element.kind === ElementKind.FOREIGN) { |
- handleForeignSend(node); |
- } else if (!element.isInstanceMember()) { |
- // Example: A.f() or f() with 'f' bound to a static function. |
- // Also includes new A() or new A.named() which is treated like a |
- // static call to a factory. |
- visitStaticSend(node); |
- } else { |
- compiler.internalError("Cannot generate code for send", node: node); |
- } |
- } |
+ node.analyse( |
+ methodInterceptionEnabled: this.methodInterceptionEnabled, |
+ elements: this.elements, |
+ superRead: (Send node) { |
+ compiler.unimplemented('super property read', node: node); |
+ }, |
+ superSend: visitSuperSend, |
+ operatorSend: visitOperatorSend, |
+ getterSend: (Send node) { |
+ generateGetter(node, elements[node]); |
+ }, |
+ closureSend: visitClosureSend, |
+ dynamicSend: visitDynamicSend, |
+ foreignSend: handleForeignSend, |
+ staticSend: visitStaticSend, |
+ internalError: (String reason) { |
+ compiler.internalError(reason, node: node); |
+ } |
+ ); |
} |
// TODO(karlklose): share with resolver. |