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

Unified Diff: lib/compiler/implementation/tree/unparser.dart

Issue 10836128: A visitor that builds a map from node to "Usage". (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/tree/unparser.dart
diff --git a/lib/compiler/implementation/tree/unparser.dart b/lib/compiler/implementation/tree/unparser.dart
index 4ee97deecbefa7c7c5edf90dc3e134bfa1d83870..3b42912d95228804caaeaf9ae261854c432c1295 100644
--- a/lib/compiler/implementation/tree/unparser.dart
+++ b/lib/compiler/implementation/tree/unparser.dart
@@ -2,11 +2,15 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// Returns null if no need to rename a node.
+typedef String Renamer(Node node);
+
class Unparser implements Visitor {
- final Renamer renamer;
+ final Renamer rename;
StringBuffer sb;
- Unparser([this.renamer = const Renamer()]);
+ Unparser() : this.withRenamer((Node) => null);
+ Unparser.withRenamer(this.rename);
String unparse(Node node) {
sb = new StringBuffer();
@@ -27,7 +31,14 @@ class Unparser implements Visitor {
}
visit(Node node) {
- if (node !== null) node.accept(this);
+ if (node === null) return;
+ String renamed = rename(node);
+ if (renamed !== null) {
+ sb.add(renamed);
+ } else {
+ // Fallback.
+ node.accept(this);
+ }
}
visitBlock(Block node) {
@@ -127,12 +138,7 @@ class Unparser implements Visitor {
}
visitIdentifier(Identifier node) {
- String newName = renamer.renameIdentifier(node);
- if (newName === null) {
- add(node.token.value);
- } else {
- sb.add(newName);
- }
+ add(node.token.value);
}
visitIf(If node) {
@@ -234,7 +240,10 @@ class Unparser implements Visitor {
if (node.isPrefix) {
visit(node.selector);
}
- if (node.receiver !== null) {
+ // TODO(smok): Remove ugly hack for library preferences.
+ // Check that renamer does not want to omit receiver at all,
+ // in that case we don't need spaces or dot.
+ if (node.receiver !== null && rename(node.receiver) != '') {
visit(node.receiver);
CascadeReceiver asCascadeReceiver = node.receiver.asCascadeReceiver();
if (asCascadeReceiver !== null) {
@@ -259,14 +268,8 @@ class Unparser implements Visitor {
}
visitSend(Send node) {
- String newMethodName = renamer.renameSendMethod(node);
- if (newMethodName !== null) {
- sb.add(newMethodName);
- visit(node.argumentsNode);
- } else {
- unparseSendPart(node);
- visit(node.argumentsNode);
- }
+ unparseSendPart(node);
+ visit(node.argumentsNode);
}
/**
@@ -315,14 +318,8 @@ class Unparser implements Visitor {
}
visitTypeAnnotation(TypeAnnotation node) {
- String newName = renamer.renameTypeName(node);
- if (newName !== null) {
- sb.add(newName);
- visit(node.typeArguments);
- } else {
- // Fallback to default unparse without renaming.
- node.visitChildren(this);
- }
+ visit(node.typeName);
+ visit(node.typeArguments);
}
visitTypeVariable(TypeVariable node) {

Powered by Google App Engine
This is Rietveld 408576698