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

Unified Diff: sdk/lib/_internal/compiler/implementation/resolved_visitor.dart

Issue 359413006: Fix handling of type literals. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Split visitTypeReferenceSend Created 6 years, 6 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
Index: sdk/lib/_internal/compiler/implementation/resolved_visitor.dart
diff --git a/sdk/lib/_internal/compiler/implementation/resolved_visitor.dart b/sdk/lib/_internal/compiler/implementation/resolved_visitor.dart
index 85cabbef63a7e7da3159d760b81b6ca0a1dde4c1..717b0a5067199031d5e561d9144be5fc1a1785c7 100644
--- a/sdk/lib/_internal/compiler/implementation/resolved_visitor.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolved_visitor.dart
@@ -12,14 +12,17 @@ abstract class ResolvedVisitor<R> extends Visitor<R> {
R visitSend(Send node) {
Element element = elements[node];
- if (node.isSuperCall) {
+ if (elements.isAssert(node)) {
+ return visitAssert(node);
+ } else if (elements.isTypeLiteral(node)) {
+ return visitTypeLiteralSend(node);
+ } else if (node.isSuperCall) {
return visitSuperSend(node);
} else if (node.isOperator) {
return visitOperatorSend(node);
} else if (node.isPropertyAccess) {
if (!Elements.isUnresolved(element) && element.impliesType) {
- // A reference to a class literal, typedef or type variable.
- return visitTypeReferenceSend(node);
+ return visitTypePrefixSend(node);
} else {
return visitGetterSend(node);
}
@@ -27,8 +30,6 @@ abstract class ResolvedVisitor<R> extends Visitor<R> {
return visitStaticSend(node);
} else if (Elements.isClosureSend(node, element)) {
return visitClosureSend(node);
- } else if (elements.isAssert(node)) {
- return visitAssert(node);
} else {
if (Elements.isUnresolved(element)) {
if (element == null) {
@@ -38,9 +39,6 @@ abstract class ResolvedVisitor<R> extends Visitor<R> {
} else {
return visitStaticSend(node);
}
- } else if (element.impliesType) {
- // A reference to a class literal, typedef or type variable.
- return visitTypeReferenceSend(node);
} else if (element.isInstanceMember) {
// Example: f() with 'f' bound to instance method.
return visitDynamicSend(node);
@@ -62,7 +60,15 @@ abstract class ResolvedVisitor<R> extends Visitor<R> {
R visitClosureSend(Send node);
R visitDynamicSend(Send node);
R visitStaticSend(Send node);
- R visitTypeReferenceSend(Send node);
+
+ /// Visitor callback for a type literal.
+ R visitTypeLiteralSend(Send node);
+
+ /// Visitor callback for the class prefix of a static access, like `Foo` in
+ /// `Foo.staticField`.
+ // TODO(johnniwinther): Remove this when not needed by the dart backend.
+ R visitTypePrefixSend(Send node);
+
R visitAssert(Send node);
void internalError(String reason, {Node node});

Powered by Google App Engine
This is Rietveld 408576698