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

Unified Diff: pkg/compiler/lib/src/dart_backend/placeholder_collector.dart

Issue 1083633002: Copy OldResolver dispatch logic to SendVisitor and remove OldResolver. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: 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 | « no previous file | pkg/compiler/lib/src/resolved_visitor.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/dart_backend/placeholder_collector.dart
diff --git a/pkg/compiler/lib/src/dart_backend/placeholder_collector.dart b/pkg/compiler/lib/src/dart_backend/placeholder_collector.dart
index 4d47c149e2c7e47562c5a69bf5a003266288fe7e..91ed14927e147a1efa69cfdcb9dfc7171db7cdd6 100644
--- a/pkg/compiler/lib/src/dart_backend/placeholder_collector.dart
+++ b/pkg/compiler/lib/src/dart_backend/placeholder_collector.dart
@@ -37,23 +37,63 @@ class DeclarationTypePlaceholder {
DeclarationTypePlaceholder(this.typeNode, this.requiresVar);
}
-class SendVisitor extends OldResolvedVisitor {
+class SendVisitor extends Visitor {
+ final TreeElements elements;
final PlaceholderCollector collector;
- SendVisitor(this.collector, TreeElements elements)
- : super(elements);
+ SendVisitor(this.collector, this.elements);
- visitOperatorSend(Send node) {
- }
-
- visitForeignSend(Send node) {}
-
- visitSuperSend(Send node) {
+ visitSend(Send node) {
Element element = elements[node];
- if (element != null && element.isConstructor) {
- collector.tryMakeConstructorPlaceholder(node, element);
+ if (elements.isAssert(node)) {
+ return;
+ } else if (elements.isTypeLiteral(node)) {
+ DartType type = elements.getTypeLiteralType(node);
+ if (!type.isDynamic) {
+ if (type is TypeVariableType) {
+ collector.makeTypeVariablePlaceholder(node.selector, type);
+ } else {
+ collector.makeTypePlaceholder(node.selector, type);
+ }
+ }
+ } else if (node.isSuperCall) {
+ if (element != null && element.isConstructor) {
+ collector.tryMakeConstructorPlaceholder(node, element);
+ } else {
+ collector.tryMakeMemberPlaceholder(node.selector);
+ }
+ } else if (node.isOperator) {
+ return;
+ } else if (node.isPropertyAccess) {
+ if (!Elements.isUnresolved(element) && element.impliesType) {
+ collector.makeElementPlaceholder(node, element);
+ } else {
+ visitGetterSend(node);
+ }
+ } else if (element != null && Initializers.isConstructorRedirect(node)) {
+ visitStaticSend(node);
+ } else if (Elements.isClosureSend(node, element)) {
+ if (element != null) {
+ collector.tryMakeLocalPlaceholder(element, node.selector);
+ }
} else {
- collector.tryMakeMemberPlaceholder(node.selector);
+ if (Elements.isUnresolved(element)) {
+ if (element == null) {
+ // Example: f() with 'f' unbound.
+ // This can only happen inside an instance method.
+ visitDynamicSend(node);
+ } else {
+ visitStaticSend(node);
+ }
+ } else if (element.isInstanceMember) {
+ // Example: f() with 'f' bound to instance method.
+ visitDynamicSend(node);
+ } else if (!element.isInstanceMember) {
+ // Example: A.f() or f() with 'f' bound to a static function.
+ // Also includes new A() or new A.named() which is treated like a
+ // static call to a factory.
+ visitStaticSend(node);
+ }
}
}
@@ -64,13 +104,6 @@ class SendVisitor extends OldResolvedVisitor {
}
}
- visitClosureSend(Send node) {
- final element = elements[node];
- if (element != null) {
- collector.tryMakeLocalPlaceholder(element, node.selector);
- }
- }
-
visitGetterSend(Send node) {
final element = elements[node];
// element == null means dynamic property access.
@@ -100,10 +133,6 @@ class SendVisitor extends OldResolvedVisitor {
}
}
- visitAssertSend(node) {
- visitStaticSend(node);
- }
-
visitStaticSend(Send node) {
Element element = elements[node];
collector.mirrorRenamer.registerStaticSend(
@@ -138,19 +167,8 @@ class SendVisitor extends OldResolvedVisitor {
collector.internalError(reason, node: node);
}
- visitTypePrefixSend(Send node) {
- collector.makeElementPlaceholder(node, elements[node]);
- }
-
- visitTypeLiteralSend(Send node) {
- DartType type = elements.getTypeLiteralType(node);
- if (!type.isDynamic) {
- if (type is TypeVariableType) {
- collector.makeTypeVariablePlaceholder(node.selector, type);
- } else {
- collector.makeTypePlaceholder(node.selector, type);
- }
- }
+ visitNode(Node node) {
+ internalError(node, "Unhandled node");
}
}
« no previous file with comments | « no previous file | pkg/compiler/lib/src/resolved_visitor.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698