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

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

Issue 10832129: Get back recording 'implements' and 'extends' keyword on NodeList (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 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 final Renamer renamer;
7 StringBuffer sb; 7 StringBuffer sb;
8 8
9 Unparser([this.renamer = const Renamer()]); 9 Unparser([this.renamer = const Renamer()]);
10 10
11 String unparse(Node node) { 11 String unparse(Node node) {
12 sb = new StringBuffer(); 12 sb = new StringBuffer();
13 visit(node); 13 visit(node);
14 return sb.toString(); 14 return sb.toString();
15 } 15 }
16 16
17 void add(SourceString string) { 17 void add(SourceString string) {
18 string.printOn(sb); 18 string.printOn(sb);
19 } 19 }
20 20
21 void addToken(Token token) {
22 if (token === null) return;
23 add(token.value);
24 if (token.kind === KEYWORD_TOKEN || token.kind === IDENTIFIER_TOKEN) {
25 sb.add(' ');
26 }
27 }
28
21 visit(Node node) { 29 visit(Node node) {
22 if (node !== null) node.accept(this); 30 if (node !== null) node.accept(this);
23 } 31 }
24 32
25 visitBlock(Block node) { 33 visitBlock(Block node) {
26 visit(node.statements); 34 visit(node.statements);
27 } 35 }
28 36
29 visitCascade(Cascade node) { 37 visitCascade(Cascade node) {
30 visit(node.expression); 38 visit(node.expression);
31 } 39 }
32 40
33 visitCascadeReceiver(CascadeReceiver node) { 41 visitCascadeReceiver(CascadeReceiver node) {
34 visit(node.expression); 42 visit(node.expression);
35 } 43 }
36 44
37 visitClassNode(ClassNode node) { 45 visitClassNode(ClassNode node) {
38 node.beginToken.value.printOn(sb); 46 addToken(node.beginToken);
39 sb.add(' ');
40 visit(node.name); 47 visit(node.name);
41 sb.add(' '); 48 sb.add(' ');
42 if (node.extendsKeyword !== null) { 49 if (node.extendsKeyword !== null) {
43 node.extendsKeyword.value.printOn(sb); 50 addToken(node.extendsKeyword);
44 sb.add(' ');
45 visit(node.superclass); 51 visit(node.superclass);
46 sb.add(' '); 52 sb.add(' ');
47 } 53 }
48 visit(node.interfaces); 54 visit(node.interfaces);
49 if (node.defaultClause !== null) { 55 if (node.defaultClause !== null) {
50 visit(node.defaultClause); 56 visit(node.defaultClause);
51 sb.add(' '); 57 sb.add(' ');
52 } 58 }
53 sb.add('{\n'); 59 sb.add('{\n');
54 sb.add('}\n'); 60 sb.add('}\n');
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 } else { 130 } else {
125 sb.add(newName); 131 sb.add(newName);
126 } 132 }
127 } 133 }
128 134
129 visitIf(If node) { 135 visitIf(If node) {
130 add(node.ifToken.value); 136 add(node.ifToken.value);
131 visit(node.condition); 137 visit(node.condition);
132 visit(node.thenPart); 138 visit(node.thenPart);
133 if (node.hasElsePart) { 139 if (node.hasElsePart) {
134 add(node.elseToken.value); 140 addToken(node.elseToken);
135 sb.add(' ');
136 visit(node.elsePart); 141 visit(node.elsePart);
137 } 142 }
138 } 143 }
139 144
140 visitLiteralBool(LiteralBool node) { 145 visitLiteralBool(LiteralBool node) {
141 add(node.token.value); 146 add(node.token.value);
142 } 147 }
143 148
144 visitLiteralDouble(LiteralDouble node) { 149 visitLiteralDouble(LiteralDouble node) {
145 add(node.token.value); 150 add(node.token.value);
(...skipping 15 matching lines...) Expand all
161 visit(node.first); 166 visit(node.first);
162 sb.add(" "); 167 sb.add(" ");
163 visit(node.second); 168 visit(node.second);
164 } 169 }
165 170
166 visitLiteralNull(LiteralNull node) { 171 visitLiteralNull(LiteralNull node) {
167 add(node.token.value); 172 add(node.token.value);
168 } 173 }
169 174
170 visitNewExpression(NewExpression node) { 175 visitNewExpression(NewExpression node) {
171 // TODO(ahe): handle 'const'. 176 addToken(node.newToken);
172 add(node.newToken.value);
173 sb.add(' ');
174 visit(node.send); 177 visit(node.send);
175 } 178 }
176 179
177 visitLiteralList(LiteralList node) { 180 visitLiteralList(LiteralList node) {
178 if (node.constKeyword !== null) { 181 addToken(node.constKeyword);
179 add(node.constKeyword.value);
180 }
181 if (node.type !== null) { 182 if (node.type !== null) {
182 sb.add('<'); 183 sb.add('<');
183 visit(node.type); 184 visit(node.type);
184 sb.add('>'); 185 sb.add('>');
185 } 186 }
186 sb.add(' ');
187 visit(node.elements); 187 visit(node.elements);
188 } 188 }
189 189
190 visitModifiers(Modifiers node) => node.visitChildren(this); 190 visitModifiers(Modifiers node) => node.visitChildren(this);
191 191
192 /** 192 /**
193 * Unparses given NodeList starting from specific node. 193 * Unparses given NodeList starting from specific node.
194 */ 194 */
195 unparseNodeListFrom(NodeList node, Link<Node> from) { 195 unparseNodeListFrom(NodeList node, Link<Node> from) {
196 if (from.isEmpty()) return; 196 if (from.isEmpty()) return;
197 String delimiter = (node.delimiter === null) ? " " : "${node.delimiter}"; 197 String delimiter = (node.delimiter === null) ? " " : "${node.delimiter}";
198 visit(from.head); 198 visit(from.head);
199 for (Link link = from.tail; !link.isEmpty(); link = link.tail) { 199 for (Link link = from.tail; !link.isEmpty(); link = link.tail) {
200 sb.add(delimiter); 200 sb.add(delimiter);
201 visit(link.head); 201 visit(link.head);
202 } 202 }
203 } 203 }
204 204
205 visitNodeList(NodeList node) { 205 visitNodeList(NodeList node) {
206 if (node.beginToken !== null) add(node.beginToken.value); 206 if (node.beginToken !== null) addToken(node.beginToken);
207 if (node.nodes !== null) { 207 if (node.nodes !== null) {
208 unparseNodeListFrom(node, node.nodes); 208 unparseNodeListFrom(node, node.nodes);
209 } 209 }
210 if (node.endToken !== null) add(node.endToken.value); 210 if (node.endToken !== null) add(node.endToken.value);
211 } 211 }
212 212
213 visitOperator(Operator node) { 213 visitOperator(Operator node) {
214 visitIdentifier(node); 214 visitIdentifier(node);
215 } 215 }
216 216
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 visit(node.type); 339 visit(node.type);
340 sb.add(' '); 340 sb.add(' ');
341 } 341 }
342 visit(node.definitions); 342 visit(node.definitions);
343 if (node.endToken.value == const SourceString(';')) { 343 if (node.endToken.value == const SourceString(';')) {
344 add(node.endToken.value); 344 add(node.endToken.value);
345 } 345 }
346 } 346 }
347 347
348 visitDoWhile(DoWhile node) { 348 visitDoWhile(DoWhile node) {
349 add(node.doKeyword.value); 349 addToken(node.doKeyword);
350 sb.add(' ');
351 visit(node.body); 350 visit(node.body);
352 sb.add(' '); 351 sb.add(' ');
353 add(node.whileKeyword.value); 352 addToken(node.whileKeyword);
354 sb.add(' ');
355 visit(node.condition); 353 visit(node.condition);
356 sb.add(node.endToken.value); 354 sb.add(node.endToken.value);
357 } 355 }
358 356
359 visitWhile(While node) { 357 visitWhile(While node) {
360 add(node.whileKeyword.value); 358 addToken(node.whileKeyword);
361 sb.add(' ');
362 visit(node.condition); 359 visit(node.condition);
363 sb.add(' '); 360 sb.add(' ');
364 visit(node.body); 361 visit(node.body);
365 } 362 }
366 363
367 visitParenthesizedExpression(ParenthesizedExpression node) { 364 visitParenthesizedExpression(ParenthesizedExpression node) {
368 add(node.getBeginToken().value); 365 add(node.getBeginToken().value);
369 visit(node.expression); 366 visit(node.expression);
370 add(node.getEndToken().value); 367 add(node.getEndToken().value);
371 } 368 }
(...skipping 29 matching lines...) Expand all
401 398
402 visitContinueStatement(ContinueStatement node) { 399 visitContinueStatement(ContinueStatement node) {
403 visitGotoStatement(node); 400 visitGotoStatement(node);
404 } 401 }
405 402
406 visitForIn(ForIn node) { 403 visitForIn(ForIn node) {
407 add(node.forToken.value); 404 add(node.forToken.value);
408 sb.add(' ('); 405 sb.add(' (');
409 visit(node.declaredIdentifier); 406 visit(node.declaredIdentifier);
410 sb.add(' '); 407 sb.add(' ');
411 add(node.inToken.value); 408 addToken(node.inToken);
412 sb.add(' ');
413 visit(node.expression); 409 visit(node.expression);
414 sb.add(') '); 410 sb.add(') ');
415 visit(node.body); 411 visit(node.body);
416 } 412 }
417 413
418 visitLabel(Label node) { 414 visitLabel(Label node) {
419 visit(node.identifier); 415 visit(node.identifier);
420 add(node.colonToken.value); 416 add(node.colonToken.value);
421 } 417 }
422 418
(...skipping 18 matching lines...) Expand all
441 } 437 }
442 438
443 visitNamedArgument(NamedArgument node) { 439 visitNamedArgument(NamedArgument node) {
444 visit(node.name); 440 visit(node.name);
445 add(node.colonToken.value); 441 add(node.colonToken.value);
446 sb.add(' '); 442 sb.add(' ');
447 visit(node.expression); 443 visit(node.expression);
448 } 444 }
449 445
450 visitSwitchStatement(SwitchStatement node) { 446 visitSwitchStatement(SwitchStatement node) {
451 add(node.switchKeyword.value); 447 addToken(node.switchKeyword);
452 sb.add(' ');
453 visit(node.parenthesizedExpression); 448 visit(node.parenthesizedExpression);
454 sb.add(' '); 449 sb.add(' ');
455 visit(node.cases); 450 visit(node.cases);
456 } 451 }
457 452
458 visitSwitchCase(SwitchCase node) { 453 visitSwitchCase(SwitchCase node) {
459 visit(node.labelsAndCases); 454 visit(node.labelsAndCases);
460 if (node.isDefaultCase) { 455 if (node.isDefaultCase) {
461 sb.add('default:'); 456 sb.add('default:');
462 } 457 }
463 visit(node.statements); 458 visit(node.statements);
464 } 459 }
465 460
466 visitScriptTag(ScriptTag node) { 461 visitScriptTag(ScriptTag node) {
467 add(node.beginToken.value); 462 add(node.beginToken.value);
468 visit(node.tag); 463 visit(node.tag);
469 sb.add('('); 464 sb.add('(');
470 visit(node.argument); 465 visit(node.argument);
471 if (node.prefixIdentifier !== null) { 466 if (node.prefixIdentifier !== null) {
472 visit(node.prefixIdentifier); 467 visit(node.prefixIdentifier);
473 sb.add(': '); 468 sb.add(': ');
474 visit(node.prefix); 469 visit(node.prefix);
475 } 470 }
476 sb.add(')'); 471 sb.add(')');
477 add(node.endToken.value); 472 add(node.endToken.value);
478 } 473 }
479 474
480 visitTryStatement(TryStatement node) { 475 visitTryStatement(TryStatement node) {
481 add(node.tryKeyword.value); 476 addToken(node.tryKeyword);
482 sb.add(' ');
483 visit(node.tryBlock); 477 visit(node.tryBlock);
484 visit(node.catchBlocks); 478 visit(node.catchBlocks);
485 if (node.finallyKeyword !== null) { 479 if (node.finallyKeyword !== null) {
486 sb.add(' '); 480 sb.add(' ');
487 add(node.finallyKeyword.value); 481 addToken(node.finallyKeyword);
488 sb.add(' ');
489 visit(node.finallyBlock); 482 visit(node.finallyBlock);
490 } 483 }
491 } 484 }
492 485
493 visitCaseMatch(CaseMatch node) { 486 visitCaseMatch(CaseMatch node) {
494 add(node.caseKeyword.value); 487 add(node.caseKeyword.value);
495 sb.add(" "); 488 sb.add(" ");
496 visit(node.expression); 489 visit(node.expression);
497 add(node.colonToken.value); 490 add(node.colonToken.value);
498 } 491 }
499 492
500 visitCatchBlock(CatchBlock node) { 493 visitCatchBlock(CatchBlock node) {
501 add(node.catchKeyword.value); 494 addToken(node.catchKeyword);
502 sb.add(' ');
503 visit(node.formals); 495 visit(node.formals);
504 sb.add(' '); 496 sb.add(' ');
505 visit(node.block); 497 visit(node.block);
506 } 498 }
507 499
508 visitTypedef(Typedef node) { 500 visitTypedef(Typedef node) {
509 add(node.typedefKeyword.value); 501 addToken(node.typedefKeyword);
510 sb.add(' ');
511 if (node.returnType !== null) { 502 if (node.returnType !== null) {
512 visit(node.returnType); 503 visit(node.returnType);
513 sb.add(' '); 504 sb.add(' ');
514 } 505 }
515 visit(node.name); 506 visit(node.name);
516 if (node.typeParameters !== null) { 507 if (node.typeParameters !== null) {
517 visit(node.typeParameters); 508 visit(node.typeParameters);
518 } 509 }
519 visit(node.formals); 510 visit(node.formals);
520 add(node.endToken.value); 511 add(node.endToken.value);
521 } 512 }
522 } 513 }
OLDNEW
« no previous file with comments | « lib/compiler/implementation/scanner/listener.dart ('k') | tests/compiler/dart2js/unparser_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698