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

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

Issue 10894011: Do not emit some unnecessary whitespaces in unparser. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 3 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 // Returns null if no need to rename a node. 5 // Returns null if no need to rename a node.
6 typedef String Renamer(Node node); 6 typedef String Renamer(Node node);
7 7
8 class Unparser implements Visitor { 8 class Unparser implements Visitor {
9 Renamer rename; 9 Renamer rename;
10 StringBuffer sb; 10 StringBuffer sb;
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 161
162 visitIdentifier(Identifier node) { 162 visitIdentifier(Identifier node) {
163 add(node.token.value); 163 add(node.token.value);
164 } 164 }
165 165
166 visitIf(If node) { 166 visitIf(If node) {
167 add(node.ifToken.value); 167 add(node.ifToken.value);
168 visit(node.condition); 168 visit(node.condition);
169 visit(node.thenPart); 169 visit(node.thenPart);
170 if (node.hasElsePart) { 170 if (node.hasElsePart) {
171 addToken(node.elseToken); 171 add(node.elseToken.value);
172 if (node.elsePart is !Block) sb.add(' ');
172 visit(node.elsePart); 173 visit(node.elsePart);
173 } 174 }
174 } 175 }
175 176
176 visitLiteralBool(LiteralBool node) { 177 visitLiteralBool(LiteralBool node) {
177 add(node.token.value); 178 add(node.token.value);
178 } 179 }
179 180
180 visitLiteralDouble(LiteralDouble node) { 181 visitLiteralDouble(LiteralDouble node) {
181 add(node.token.value); 182 add(node.token.value);
(...skipping 20 matching lines...) Expand all
202 visitLiteralNull(LiteralNull node) { 203 visitLiteralNull(LiteralNull node) {
203 add(node.token.value); 204 add(node.token.value);
204 } 205 }
205 206
206 visitNewExpression(NewExpression node) { 207 visitNewExpression(NewExpression node) {
207 addToken(node.newToken); 208 addToken(node.newToken);
208 visit(node.send); 209 visit(node.send);
209 } 210 }
210 211
211 visitLiteralList(LiteralList node) { 212 visitLiteralList(LiteralList node) {
212 addToken(node.constKeyword); 213 if (node.constKeyword !== null) add(node.constKeyword.value);
213 visit(node.typeArguments); 214 visit(node.typeArguments);
214 visit(node.elements); 215 visit(node.elements);
215 } 216 }
216 217
217 visitModifiers(Modifiers node) => node.visitChildren(this); 218 visitModifiers(Modifiers node) => node.visitChildren(this);
218 219
219 /** 220 /**
220 * Unparses given NodeList starting from specific node. 221 * Unparses given NodeList starting from specific node.
221 */ 222 */
222 unparseNodeListFrom(NodeList node, Link<Node> from) { 223 unparseNodeListFrom(NodeList node, Link<Node> from) {
223 if (from.isEmpty()) return; 224 if (from.isEmpty()) return;
224 String delimiter = (node.delimiter === null) ? " " : "${node.delimiter}"; 225 String delimiter = (node.delimiter === null) ? "" : "${node.delimiter}";
225 visit(from.head); 226 visit(from.head);
226 for (Link link = from.tail; !link.isEmpty(); link = link.tail) { 227 for (Link link = from.tail; !link.isEmpty(); link = link.tail) {
227 sb.add(delimiter); 228 sb.add(delimiter);
228 visit(link.head); 229 visit(link.head);
229 } 230 }
230 } 231 }
231 232
232 visitNodeList(NodeList node) { 233 visitNodeList(NodeList node) {
233 if (node.beginToken !== null) addToken(node.beginToken); 234 addToken(node.beginToken);
234 if (node.nodes !== null) { 235 if (node.nodes !== null) {
235 unparseNodeListFrom(node, node.nodes); 236 unparseNodeListFrom(node, node.nodes);
236 } 237 }
237 if (node.endToken !== null) add(node.endToken.value); 238 if (node.endToken !== null) add(node.endToken.value);
238 } 239 }
239 240
240 visitOperator(Operator node) { 241 visitOperator(Operator node) {
241 visitIdentifier(node); 242 visitIdentifier(node);
242 } 243 }
243 244
244 visitReturn(Return node) { 245 visitReturn(Return node) {
245 add(node.beginToken.value); 246 add(node.beginToken.value);
246 if (node.hasExpression) { 247 if (node.hasExpression && node.beginToken.stringValue != '=>') {
247 sb.add(' '); 248 sb.add(' ');
248 visit(node.expression);
249 } 249 }
250 visit(node.expression);
250 if (node.endToken !== null) add(node.endToken.value); 251 if (node.endToken !== null) add(node.endToken.value);
251 } 252 }
252 253
253 unparseSendReceiver(Send node, [bool spacesNeeded=false]) { 254 unparseSendReceiver(Send node, [bool spacesNeeded=false]) {
254 // TODO(smok): Remove ugly hack for library preferences. 255 // TODO(smok): Remove ugly hack for library preferences.
255 // Check that renamer does not want to omit receiver at all, 256 // Check that renamer does not want to omit receiver at all,
256 // in that case we don't need spaces or dot. 257 // in that case we don't need spaces or dot.
257 if (node.receiver !== null && rename(node.receiver) != '') { 258 if (node.receiver !== null && rename(node.receiver) != '') {
258 visit(node.receiver); 259 visit(node.receiver);
259 CascadeReceiver asCascadeReceiver = node.receiver.asCascadeReceiver(); 260 CascadeReceiver asCascadeReceiver = node.receiver.asCascadeReceiver();
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 visit(node.type); 333 visit(node.type);
333 sb.add(' '); 334 sb.add(' ');
334 } 335 }
335 visit(node.definitions); 336 visit(node.definitions);
336 if (node.endToken.value == const SourceString(';')) { 337 if (node.endToken.value == const SourceString(';')) {
337 add(node.endToken.value); 338 add(node.endToken.value);
338 } 339 }
339 } 340 }
340 341
341 visitDoWhile(DoWhile node) { 342 visitDoWhile(DoWhile node) {
342 addToken(node.doKeyword); 343 add(node.doKeyword.value);
344 if (node.body is !Block) sb.add(' ');
343 visit(node.body); 345 visit(node.body);
344 sb.add(' '); 346 add(node.whileKeyword.value);
345 addToken(node.whileKeyword);
346 visit(node.condition); 347 visit(node.condition);
347 sb.add(node.endToken.value); 348 sb.add(node.endToken.value);
348 } 349 }
349 350
350 visitWhile(While node) { 351 visitWhile(While node) {
351 addToken(node.whileKeyword); 352 addToken(node.whileKeyword);
352 visit(node.condition); 353 visit(node.condition);
353 sb.add(' ');
354 visit(node.body); 354 visit(node.body);
355 } 355 }
356 356
357 visitParenthesizedExpression(ParenthesizedExpression node) { 357 visitParenthesizedExpression(ParenthesizedExpression node) {
358 add(node.getBeginToken().value); 358 add(node.getBeginToken().value);
359 visit(node.expression); 359 visit(node.expression);
360 add(node.getEndToken().value); 360 add(node.getEndToken().value);
361 } 361 }
362 362
363 visitStringInterpolation(StringInterpolation node) { 363 visitStringInterpolation(StringInterpolation node) {
(...skipping 24 matching lines...) Expand all
388 visitBreakStatement(BreakStatement node) { 388 visitBreakStatement(BreakStatement node) {
389 visitGotoStatement(node); 389 visitGotoStatement(node);
390 } 390 }
391 391
392 visitContinueStatement(ContinueStatement node) { 392 visitContinueStatement(ContinueStatement node) {
393 visitGotoStatement(node); 393 visitGotoStatement(node);
394 } 394 }
395 395
396 visitForIn(ForIn node) { 396 visitForIn(ForIn node) {
397 add(node.forToken.value); 397 add(node.forToken.value);
398 sb.add(' ('); 398 sb.add('(');
399 visit(node.declaredIdentifier); 399 visit(node.declaredIdentifier);
400 sb.add(' '); 400 sb.add(' ');
401 addToken(node.inToken); 401 addToken(node.inToken);
402 visit(node.expression); 402 visit(node.expression);
403 sb.add(') '); 403 sb.add(')');
404 visit(node.body); 404 visit(node.body);
405 } 405 }
406 406
407 visitLabel(Label node) { 407 visitLabel(Label node) {
408 visit(node.identifier); 408 visit(node.identifier);
409 add(node.colonToken.value); 409 add(node.colonToken.value);
410 } 410 }
411 411
412 visitLabeledStatement(LabeledStatement node) { 412 visitLabeledStatement(LabeledStatement node) {
413 visit(node.labels); 413 visit(node.labels);
414 visit(node.statement); 414 visit(node.statement);
415 } 415 }
416 416
417 visitLiteralMap(LiteralMap node) { 417 visitLiteralMap(LiteralMap node) {
418 if (node.constKeyword !== null) { 418 if (node.constKeyword !== null) add(node.constKeyword.value);
419 add(node.constKeyword.value);
420 }
421 if (node.typeArguments !== null) visit(node.typeArguments); 419 if (node.typeArguments !== null) visit(node.typeArguments);
422 visit(node.entries); 420 visit(node.entries);
423 } 421 }
424 422
425 visitLiteralMapEntry(LiteralMapEntry node) { 423 visitLiteralMapEntry(LiteralMapEntry node) {
426 visit(node.key); 424 visit(node.key);
427 add(node.colonToken.value); 425 add(node.colonToken.value);
428 sb.add(' ');
429 visit(node.value); 426 visit(node.value);
430 } 427 }
431 428
432 visitNamedArgument(NamedArgument node) { 429 visitNamedArgument(NamedArgument node) {
433 visit(node.name); 430 visit(node.name);
434 add(node.colonToken.value); 431 add(node.colonToken.value);
435 sb.add(' ');
436 visit(node.expression); 432 visit(node.expression);
437 } 433 }
438 434
439 visitSwitchStatement(SwitchStatement node) { 435 visitSwitchStatement(SwitchStatement node) {
440 addToken(node.switchKeyword); 436 addToken(node.switchKeyword);
441 visit(node.parenthesizedExpression); 437 visit(node.parenthesizedExpression);
442 sb.add(' ');
443 visit(node.cases); 438 visit(node.cases);
444 } 439 }
445 440
446 visitSwitchCase(SwitchCase node) { 441 visitSwitchCase(SwitchCase node) {
447 visit(node.labelsAndCases); 442 visit(node.labelsAndCases);
448 if (node.isDefaultCase) { 443 if (node.isDefaultCase) {
449 sb.add('default:'); 444 sb.add('default:');
450 } 445 }
451 visit(node.statements); 446 visit(node.statements);
452 } 447 }
453 448
454 visitScriptTag(ScriptTag node) { 449 visitScriptTag(ScriptTag node) {
455 add(node.beginToken.value); 450 add(node.beginToken.value);
456 visit(node.tag); 451 visit(node.tag);
457 sb.add('('); 452 sb.add('(');
458 visit(node.argument); 453 visit(node.argument);
459 if (node.prefixIdentifier !== null) { 454 if (node.prefixIdentifier !== null) {
460 visit(node.prefixIdentifier); 455 visit(node.prefixIdentifier);
461 sb.add(': '); 456 sb.add(':');
462 visit(node.prefix); 457 visit(node.prefix);
463 } 458 }
464 sb.add(')'); 459 sb.add(')');
465 add(node.endToken.value); 460 add(node.endToken.value);
466 } 461 }
467 462
468 visitTryStatement(TryStatement node) { 463 visitTryStatement(TryStatement node) {
469 addToken(node.tryKeyword); 464 add(node.tryKeyword.value);
470 visit(node.tryBlock); 465 visit(node.tryBlock);
471 visit(node.catchBlocks); 466 visit(node.catchBlocks);
472 if (node.finallyKeyword !== null) { 467 if (node.finallyKeyword !== null) {
473 sb.add(' ');
474 addToken(node.finallyKeyword); 468 addToken(node.finallyKeyword);
475 visit(node.finallyBlock); 469 visit(node.finallyBlock);
476 } 470 }
477 } 471 }
478 472
479 visitCaseMatch(CaseMatch node) { 473 visitCaseMatch(CaseMatch node) {
480 add(node.caseKeyword.value); 474 add(node.caseKeyword.value);
481 sb.add(" "); 475 sb.add(" ");
482 visit(node.expression); 476 visit(node.expression);
483 add(node.colonToken.value); 477 add(node.colonToken.value);
484 } 478 }
485 479
486 visitCatchBlock(CatchBlock node) { 480 visitCatchBlock(CatchBlock node) {
487 addToken(node.onKeyword); 481 addToken(node.onKeyword);
488 visit(node.type); 482 if (node.type !== null) {
489 sb.add(' '); 483 visit(node.type);
490 addToken(node.catchKeyword); 484 sb.add(' ');
485 }
486 add(node.catchKeyword.value);
491 visit(node.formals); 487 visit(node.formals);
492 sb.add(' ');
493 visit(node.block); 488 visit(node.block);
494 } 489 }
495 490
496 visitTypedef(Typedef node) { 491 visitTypedef(Typedef node) {
497 addToken(node.typedefKeyword); 492 addToken(node.typedefKeyword);
498 if (node.returnType !== null) { 493 if (node.returnType !== null) {
499 visit(node.returnType); 494 visit(node.returnType);
500 sb.add(' '); 495 sb.add(' ');
501 } 496 }
502 visit(node.name); 497 visit(node.name);
503 if (node.typeParameters !== null) { 498 if (node.typeParameters !== null) {
504 visit(node.typeParameters); 499 visit(node.typeParameters);
505 } 500 }
506 visit(node.formals); 501 visit(node.formals);
507 add(node.endToken.value); 502 add(node.endToken.value);
508 } 503 }
509 } 504 }
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