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

Side by Side Diff: lib/compiler/implementation/tree/unparser.dart

Issue 10795064: dart2dart: Introduce Renamer that is used by renaming unparser (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 class Unparser implements Visitor { 5 class Unparser implements Visitor {
6 final Renamer renamer;
6 StringBuffer sb; 7 StringBuffer sb;
7 8
8 Unparser(); 9 Unparser([this.renamer = const Renamer()]);
9 10
10 String unparse(Node node) { 11 String unparse(Node node) {
11 sb = new StringBuffer(); 12 sb = new StringBuffer();
12 visit(node); 13 visit(node);
13 return sb.toString(); 14 return sb.toString();
14 } 15 }
15 16
16 void add(SourceString string) { 17 void add(SourceString string) {
17 string.printOn(sb); 18 string.printOn(sb);
18 } 19 }
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 visit(send.selector); 111 visit(send.selector);
111 } else { 112 } else {
112 visit(node.name); 113 visit(node.name);
113 } 114 }
114 visit(node.parameters); 115 visit(node.parameters);
115 visit(node.initializers); 116 visit(node.initializers);
116 visit(node.body); 117 visit(node.body);
117 } 118 }
118 119
119 visitIdentifier(Identifier node) { 120 visitIdentifier(Identifier node) {
120 add(node.token.value); 121 String newName = renamer.renameIdentifier(node);
122 if (newName == null) {
123 add(node.token.value);
124 } else {
125 sb.add(newName);
126 }
121 } 127 }
122 128
123 visitIf(If node) { 129 visitIf(If node) {
124 add(node.ifToken.value); 130 add(node.ifToken.value);
125 visit(node.condition); 131 visit(node.condition);
126 visit(node.thenPart); 132 visit(node.thenPart);
127 if (node.hasElsePart) { 133 if (node.hasElsePart) {
128 add(node.elseToken.value); 134 add(node.elseToken.value);
129 sb.add(' '); 135 sb.add(' ');
130 visit(node.elsePart); 136 visit(node.elsePart);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 sb.add(' '); 182 sb.add(' ');
177 visit(node.elements); 183 visit(node.elements);
178 } 184 }
179 185
180 visitModifiers(Modifiers node) => node.visitChildren(this); 186 visitModifiers(Modifiers node) => node.visitChildren(this);
181 187
182 /** 188 /**
183 * Unparses given NodeList starting from specific node. 189 * Unparses given NodeList starting from specific node.
184 */ 190 */
185 unparseNodeListFrom(NodeList node, Link<Node> from) { 191 unparseNodeListFrom(NodeList node, Link<Node> from) {
192 if (from.isEmpty()) return;
186 String delimiter = (node.delimiter === null) ? " " : "${node.delimiter} "; 193 String delimiter = (node.delimiter === null) ? " " : "${node.delimiter} ";
187 from.printOn(sb, delimiter); 194 visit(from.head);
195 for (Link link = from.tail; !link.isEmpty(); link = link.tail) {
196 sb.add(delimiter);
197 visit(link.head);
198 }
188 } 199 }
189 200
190 visitNodeList(NodeList node) { 201 visitNodeList(NodeList node) {
191 if (node.beginToken !== null) add(node.beginToken.value); 202 if (node.beginToken !== null) add(node.beginToken.value);
192 if (node.nodes !== null) { 203 if (node.nodes !== null) {
193 unparseNodeListFrom(node, node.nodes); 204 unparseNodeListFrom(node, node.nodes);
194 } 205 }
195 if (node.endToken !== null) add(node.endToken.value); 206 if (node.endToken !== null) add(node.endToken.value);
196 } 207 }
197 208
(...skipping 26 matching lines...) Expand all
224 } 235 }
225 } 236 }
226 if (!node.isPrefix && !node.isIndex) { 237 if (!node.isPrefix && !node.isIndex) {
227 visit(node.selector); 238 visit(node.selector);
228 } 239 }
229 if (isCheck) { 240 if (isCheck) {
230 sb.add(' '); 241 sb.add(' ');
231 } 242 }
232 } 243 }
233 244
234 visitSend(Send node) { 245 unparseSend(Send node) {
235 unparseSendPart(node); 246 unparseSendPart(node);
236 visit(node.argumentsNode); 247 visit(node.argumentsNode);
237 } 248 }
238 249
250 visitSend(Send node) {
251 String newMethodName = renamer.renameSendMethod(node);
252 if (newMethodName !== null) {
253 sb.add(newMethodName);
254 visit(node.argumentsNode);
255 } else {
256 unparseSendPart(node);
257 visit(node.argumentsNode);
258 }
259 }
260
239 /** 261 /**
240 * Special case for assignments like "list[0] = 1". 262 * Special case for assignments like "list[0] = 1".
241 */ 263 */
242 unparseIndexedSet(SendSet node) { 264 unparseIndexedSet(SendSet node) {
243 if (node.isPrefix) { 265 if (node.isPrefix) {
244 add(node.assignmentOperator.token.value); 266 add(node.assignmentOperator.token.value);
245 } 267 }
246 visit(node.receiver); 268 visit(node.receiver);
247 sb.add('['); 269 sb.add('[');
248 sb.add(node.arguments.head); 270 sb.add(node.arguments.head);
(...skipping 22 matching lines...) Expand all
271 visitThrow(Throw node) { 293 visitThrow(Throw node) {
272 add(node.throwToken.value); 294 add(node.throwToken.value);
273 if (node.expression !== null) { 295 if (node.expression !== null) {
274 sb.add(' '); 296 sb.add(' ');
275 visit(node.expression); 297 visit(node.expression);
276 } 298 }
277 node.endToken.value.printOn(sb); 299 node.endToken.value.printOn(sb);
278 } 300 }
279 301
280 visitTypeAnnotation(TypeAnnotation node) { 302 visitTypeAnnotation(TypeAnnotation node) {
281 node.visitChildren(this); 303 String newName = renamer.renameTypeName(node);
304 if (newName !== null) {
305 sb.add(newName);
306 visit(node.typeArguments);
307 } else {
308 // Fallback to default unparse without renaming.
309 node.visitChildren(this);
310 }
282 } 311 }
283 312
284 visitTypeVariable(TypeVariable node) { 313 visitTypeVariable(TypeVariable node) {
285 visit(node.name); 314 visit(node.name);
286 if (node.bound !== null) { 315 if (node.bound !== null) {
287 sb.add(' extends '); 316 sb.add(' extends ');
288 visit(node.bound); 317 visit(node.bound);
289 } 318 }
290 } 319 }
291 320
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 sb.add(' '); 501 sb.add(' ');
473 } 502 }
474 visit(node.name); 503 visit(node.name);
475 if (node.typeParameters !== null) { 504 if (node.typeParameters !== null) {
476 visit(node.typeParameters); 505 visit(node.typeParameters);
477 } 506 }
478 visit(node.formals); 507 visit(node.formals);
479 add(node.endToken.value); 508 add(node.endToken.value);
480 } 509 }
481 } 510 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698