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

Unified Diff: lib/compiler/implementation/dart_backend/placeholder_collector.dart

Issue 10836261: dart2dart Preproces placeholders instead of renaming them lazily, (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 4 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: lib/compiler/implementation/dart_backend/placeholder_collector.dart
diff --git a/lib/compiler/implementation/dart_backend/placeholder_collector.dart b/lib/compiler/implementation/dart_backend/placeholder_collector.dart
index 364a8f56a2bdd922b95476f1cf01a0097155e59a..2b68160003b297e0bbf420cfeaa337b554ef9a0e 100644
--- a/lib/compiler/implementation/dart_backend/placeholder_collector.dart
+++ b/lib/compiler/implementation/dart_backend/placeholder_collector.dart
@@ -72,14 +72,21 @@ class SendVisitor extends ResolvedVisitor {
class PlaceholderCollector extends AbstractVisitor {
final Compiler compiler;
- final Map<Node, Placeholder> placeholders;
- final Map<Element, Map<String, LocalPlaceholder>> localPlaceholders;
+ final Set<Node> nullNodes; // Nodes that should not be in output.
+ final Set<Identifier> unresolvedNodes;
+ final Map<Element, Set<Node>> elementNodes;
+ final Map<FunctionElement, Set<LocalPlaceholder>> localPlaceholders;
+ final Map<LibraryElement, Set<Node>> privateNodes;
+ Map<String, LocalPlaceholder> currentLocalPlaceholders;
Element currentElement;
TreeElements treeElements;
PlaceholderCollector(this.compiler) :
- placeholders = new Map<Node, Placeholder>(),
- localPlaceholders = new Map<Element, Map<String, LocalPlaceholder>>();
+ nullNodes = new Set<Node>(),
+ unresolvedNodes = new Set<Identifier>(),
+ elementNodes = new Map<Element, Set<Node>>(),
+ localPlaceholders = new Map<FunctionElement, Set<LocalPlaceholder>>(),
+ privateNodes = new Map<LibraryElement, Set<Node>>();
void collectFunctionDeclarationPlaceholders(
FunctionElement element, FunctionExpression node) {
@@ -180,6 +187,7 @@ class PlaceholderCollector extends AbstractVisitor {
} else {
assert(false); // Unreachable.
}
+ currentLocalPlaceholders = new Map<String, LocalPlaceholder>();
compiler.withCurrentElement(element, () {
elementNode.accept(this);
});
@@ -214,35 +222,38 @@ class PlaceholderCollector extends AbstractVisitor {
}
void makeNullPlaceholder(Node node) {
- placeholders[node] = new NullPlaceholder();
+ assert(node is Identifier || node is Send);
+ nullNodes.add(node);
}
void makeElementPlaceholder(Node node, Element element) {
assert(element !== null);
- placeholders[node] = new ElementPlaceholder(element);
+ elementNodes.putIfAbsent(element, () => new Set<Node>()).add(node);
}
void makePrivateIdentifier(Identifier node) {
assert(node !== null);
- placeholders[node] =
- new PrivatePlaceholder(currentElement.getLibrary(), node);
+ privateNodes.putIfAbsent(
+ currentElement.getLibrary(), () => new Set<Node>()).add(node);
}
void makeUnresolvedPlaceholder(Node node) {
- placeholders[node] = const UnresolvedPlaceholder();
+ unresolvedNodes.add(node);
}
void makeLocalPlaceholder(Node node) {
assert(currentElement is FunctionElement);
assert(node is Identifier);
- Map<String, LocalPlaceholder> functionLocals =
- localPlaceholders.putIfAbsent(currentElement,
- () => <LocalPlaceholder>{});
String identifier = node.asIdentifier().source.slowToString();
LocalPlaceholder localPlaceholder =
- functionLocals.putIfAbsent(identifier,
- () => new LocalPlaceholder(currentElement, identifier));
- placeholders[node] = localPlaceholder;
+ currentLocalPlaceholders.putIfAbsent(identifier,
+ () {
+ LocalPlaceholder localPlaceholder =
+ new LocalPlaceholder(identifier);
+ localPlaceholders.putIfAbsent(currentElement,
+ () => new Set<LocalPlaceholder>()).add(localPlaceholder);
+ return localPlaceholder;
+ });
}
void internalError(String reason, [Node node]) {

Powered by Google App Engine
This is Rietveld 408576698