Chromium Code Reviews| Index: frog/leg/ssa/builder.dart |
| diff --git a/frog/leg/ssa/builder.dart b/frog/leg/ssa/builder.dart |
| index f846ad1ab8eb74d87a4a1a5bf79f8a6374c75d6f..1fefb9a6d7ec6b530e2e46d8deff072482df8e1f 100644 |
| --- a/frog/leg/ssa/builder.dart |
| +++ b/frog/leg/ssa/builder.dart |
| @@ -551,6 +551,7 @@ class SsaBuilder implements Visitor { |
| compiler.unimplemented("Ssa.visitIdentifier.", node: node); |
| } |
| stack.add(thisDefinition); |
| + } else if (node.isSuper()) { |
|
ngeoffray
2012/01/10 16:52:50
maybe add at the entry of this function assert(!no
karlklose
2012/01/11 12:45:17
I generate an internal error.
|
| } else { |
| Element element = elements[node]; |
| compiler.ensure(element !== null); |
| @@ -988,6 +989,22 @@ class SsaBuilder implements Visitor { |
| } |
| } |
| + visitSuperSend(Send node) { |
| + Element element = elements[node]; |
| + HStatic target = new HStatic(element); |
| + HThis context = thisDefinition; |
| + if (context === null) { |
| + compiler.unimplemented("Ssa.visitSuperSend without thisDefinition.", |
| + node: node); |
| + } |
| + add(target); |
| + var inputs = <HInstruction>[]; |
| + inputs.add(target); |
| + inputs.add(context); |
|
ngeoffray
2012/01/10 16:52:50
put target and context in the list literal.
karlklose
2012/01/11 12:45:17
Done.
|
| + addVisitedSendArgumentsToList(node.arguments, inputs); |
| + push(new HInvokeSuper(inputs)); |
| + } |
| + |
| visitStaticSend(Send node) { |
| Element element = elements[node]; |
| HStatic target = new HStatic(element); |
| @@ -1005,6 +1022,10 @@ class SsaBuilder implements Visitor { |
| generateGetter(node, elements[node]); |
| } else if (Elements.isClosureSend(node, elements)) { |
| visitClosureSend(node); |
| + } else if (node.receiver !== null && |
| + node.receiver.asIdentifier() !== null && |
| + node.receiver.asIdentifier().isSuper()) { |
| + visitSuperSend(node); |
| } else { |
| Element element = elements[node]; |
| if (element === null) { |