Chromium Code Reviews| Index: lib/compiler/implementation/ssa/codegen.dart |
| =================================================================== |
| --- lib/compiler/implementation/ssa/codegen.dart (revision 6835) |
| +++ lib/compiler/implementation/ssa/codegen.dart (working copy) |
| @@ -1027,6 +1027,17 @@ |
| // If we know we're calling a specific method, register that |
| // method only. |
| compiler.registerDynamicInvocationOf(node.element); |
| + } else if (node.inputs[0] is HThis) { |
| + // TODO(ngeoffray): We should propagate an union type in |
| + // earlier phases instead of just checking if the receiver is 'this'. |
| + ClassElement cls = work.element.enclosingElement; |
| + Element method = cls.lookupMember(node.name); |
|
floitsch
2012/04/23 13:58:30
Is this just to reduce the number of typed invocat
ngeoffray
2012/04/23 14:09:33
Yes.
floitsch
2012/04/23 15:01:51
Yes. I think that would be the more "correct" vers
ngeoffray
2012/04/23 15:22:47
Added a comment.
|
| + if (method !== null) { |
| + cls = method.enclosingElement; |
| + } |
| + Type type = cls.computeType(compiler); |
| + compiler.registerDynamicInvocation( |
| + node.name, new TypedInvocation(type, node.selector)); |
| } else { |
| compiler.registerDynamicInvocation(node.name, node.selector); |
| } |