Index: pkg/compiler/lib/src/resolved_visitor.dart |
diff --git a/pkg/compiler/lib/src/resolved_visitor.dart b/pkg/compiler/lib/src/resolved_visitor.dart |
index 86beb30fef8981de4a452e228931eb0b135a08d6..b6a80cd203093e9c5a8426eb296ccde02a5debab 100644 |
--- a/pkg/compiler/lib/src/resolved_visitor.dart |
+++ b/pkg/compiler/lib/src/resolved_visitor.dart |
@@ -19,6 +19,7 @@ enum ResolvedKind { |
ERROR, |
SEND_SET, |
NEW, |
+ SUPER_CONSTRUCTOR, |
} |
/// Abstract interface for a [ResolvedVisitor]. |
@@ -34,6 +35,8 @@ abstract class ResolvedKindVisitor<R> { |
R visitClosureSend(Send node); |
R visitDynamicSend(Send node); |
R visitStaticSend(Send node); |
+ |
+ R handleSuperConstructorInvoke(Send node); |
R handleSendSet(SendSet node); |
R handleNewExpression(NewExpression node); |
@@ -67,6 +70,9 @@ class ResolvedKindComputer implements ResolvedKindVisitor { |
ResolvedKind visitTypeLiteralSend(Send node) => ResolvedKind.TYPE_LITERAL; |
ResolvedKind visitTypePrefixSend(Send node) => ResolvedKind.TYPE_PREFIX; |
ResolvedKind visitAssertSend(Send node) => ResolvedKind.ASSERT; |
+ ResolvedKind handleSuperConstructorInvoke(Send node) { |
+ return ResolvedKind.SUPER_CONSTRUCTOR; |
+ } |
ResolvedKind handleSendSet(SendSet node) => ResolvedKind.SEND_SET; |
ResolvedKind handleNewExpression(NewExpression node) => ResolvedKind.NEW; |
internalError(Spannable node, String reason) => ResolvedKind.ERROR; |
@@ -91,6 +97,9 @@ abstract class BaseResolvedVisitor<R> extends Visitor<R> |
} else if (elements.isTypeLiteral(node)) { |
return visitor.visitTypeLiteralSend(node); |
} else if (node.isSuperCall) { |
+ if (element != null && element.isConstructor) { |
+ return visitor.handleSuperConstructorInvoke(node); |
+ } |
return visitor.visitSuperSend(node); |
} else if (node.isOperator) { |
return visitor.visitOperatorSend(node); |
@@ -165,7 +174,7 @@ abstract class NewResolvedVisitor<R> extends BaseResolvedVisitor<R> |
Element element = elements[node]; |
if (element != null && element.isConstructor) { |
if (node.isSuperCall) { |
- return kindVisitor.visitSuperSend(node); |
+ return kindVisitor.handleSuperConstructorInvoke(node); |
} else { |
return kindVisitor.visitStaticSend(node); |
} |
@@ -468,9 +477,6 @@ class ResolvedSemanticDispatcher<R> extends Object |
Send node, |
Element element, |
ResolvedKindVisitor<R> visitor) { |
- if (node.isSuperCall) { |
- return visitor.visitSuperSend(node); |
- } |
return visitor.visitGetterSend(node); |
} |
@@ -481,9 +487,6 @@ class ResolvedSemanticDispatcher<R> extends Object |
NodeList arguments, |
Selector selector, |
ResolvedKindVisitor<R> visitor) { |
- if (node.isSuperCall) { |
- return visitor.visitSuperSend(node); |
- } |
return visitor.visitStaticSend(node); |
} |
@@ -506,25 +509,6 @@ class ResolvedSemanticDispatcher<R> extends Object |
} |
@override |
- R errorUnresolvedSuperBinary( |
- Send node, |
- Element element, |
- op.BinaryOperator operator, |
- Node argument, |
- ResolvedKindVisitor<R> visitor) { |
- return visitor.visitSuperSend(node); |
- } |
- |
- @override |
- R errorUnresolvedSuperUnary( |
- Send node, |
- op.UnaryOperator operator, |
- Element element, |
- ResolvedKindVisitor<R> visitor) { |
- return visitor.visitSuperSend(node); |
- } |
- |
- @override |
R visitAs( |
Send node, |
Node expression, |
@@ -779,13 +763,4 @@ class ResolvedSemanticDispatcher<R> extends Object |
ResolvedKindVisitor<R> visitor) { |
return visitor.visitSuperSend(node); |
} |
- |
- @override |
- R errorUnresolvedSuperIndex( |
- Send node, |
- Element function, |
- Node index, |
- ResolvedKindVisitor<R> visitor) { |
- return visitor.visitSuperSend(node); |
- } |
} |