Chromium Code Reviews| Index: lib/compiler/implementation/tree/unparser.dart |
| diff --git a/lib/compiler/implementation/tree/unparser.dart b/lib/compiler/implementation/tree/unparser.dart |
| index 8b3f03ad9df71e9609fec31fcbafdd89b8f78962..b48e08599b820aa9f57f2e1579c4a9d22afbe30b 100644 |
| --- a/lib/compiler/implementation/tree/unparser.dart |
| +++ b/lib/compiler/implementation/tree/unparser.dart |
| @@ -3,9 +3,10 @@ |
| // BSD-style license that can be found in the LICENSE file. |
| class Unparser implements Visitor { |
| + final Renamer renamer; |
|
ahe
2012/10/01 11:27:27
I'm not really comfortable with this addition. The
Anton Muhin
2012/10/01 13:10:08
I agree with you, Peter, see https://chromiumcoder
ahe
2012/10/01 13:22:42
Thank you, good that we agree on the long term dir
|
| StringBuffer sb; |
| - Unparser(); |
| + Unparser([this.renamer = const Renamer()]); |
| String unparse(Node node) { |
| sb = new StringBuffer(); |
| @@ -117,7 +118,12 @@ class Unparser implements Visitor { |
| } |
| visitIdentifier(Identifier node) { |
| - add(node.token.value); |
| + String newName = renamer.renameIdentifier(node); |
| + if (newName == null) { |
| + add(node.token.value); |
| + } else { |
| + sb.add(newName); |
| + } |
| } |
| visitIf(If node) { |
| @@ -183,8 +189,13 @@ class Unparser implements Visitor { |
| * Unparses given NodeList starting from specific node. |
| */ |
| unparseNodeListFrom(NodeList node, Link<Node> from) { |
| + if (from.isEmpty()) return; |
| String delimiter = (node.delimiter === null) ? " " : "${node.delimiter} "; |
| - from.printOn(sb, delimiter); |
| + visit(from.head); |
| + for (Link link = from.tail; !link.isEmpty(); link = link.tail) { |
| + sb.add(delimiter); |
| + visit(link.head); |
| + } |
| } |
| visitNodeList(NodeList node) { |
| @@ -231,11 +242,22 @@ class Unparser implements Visitor { |
| } |
| } |
| - visitSend(Send node) { |
| + unparseSend(Send node) { |
| unparseSendPart(node); |
| visit(node.argumentsNode); |
| } |
| + visitSend(Send node) { |
| + String newMethodName = renamer.renameSendMethod(node); |
| + if (newMethodName !== null) { |
| + sb.add(newMethodName); |
| + visit(node.argumentsNode); |
| + } else { |
| + unparseSendPart(node); |
| + visit(node.argumentsNode); |
| + } |
| + } |
| + |
| /** |
| * Special case for assignments like "list[0] = 1". |
| */ |
| @@ -278,7 +300,14 @@ class Unparser implements Visitor { |
| } |
| visitTypeAnnotation(TypeAnnotation node) { |
| - node.visitChildren(this); |
| + String newName = renamer.renameTypeName(node); |
| + if (newName !== null) { |
| + sb.add(newName); |
| + visit(node.typeArguments); |
| + } else { |
| + // Fallback to default unparse without renaming. |
| + node.visitChildren(this); |
| + } |
| } |
| visitTypeVariable(TypeVariable node) { |