Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(355)

Unified Diff: pkg/compiler/lib/src/resolved_visitor.dart

Issue 1108783003: Refactor SsaBuilder.visitSuperSend. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updated cf. comments. Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/compiler/lib/src/resolution/send_structure.dart ('k') | pkg/compiler/lib/src/ssa/builder.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
- }
}
« no previous file with comments | « pkg/compiler/lib/src/resolution/send_structure.dart ('k') | pkg/compiler/lib/src/ssa/builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698