OLD | NEW |
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 part of js_ast; | 5 part of js_ast; |
6 | 6 |
7 | 7 |
8 class JavaScriptPrintingOptions { | 8 class JavaScriptPrintingOptions { |
9 final bool shouldCompressOutput; | 9 final bool shouldCompressOutput; |
10 final bool minifyLocalVariables; | 10 final bool minifyLocalVariables; |
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
588 } | 588 } |
589 | 589 |
590 visitVariableDeclarationList(VariableDeclarationList list) { | 590 visitVariableDeclarationList(VariableDeclarationList list) { |
591 outClosureAnnotation(list); | 591 outClosureAnnotation(list); |
592 out(list.keyword); | 592 out(list.keyword); |
593 out(" "); | 593 out(" "); |
594 visitCommaSeparated(list.declarations, ASSIGNMENT, | 594 visitCommaSeparated(list.declarations, ASSIGNMENT, |
595 newInForInit: inForInit, newAtStatementBegin: false); | 595 newInForInit: inForInit, newAtStatementBegin: false); |
596 } | 596 } |
597 | 597 |
| 598 visitArrayDestructuring(ArrayDestructuring node) { |
| 599 out("["); |
| 600 visitCommaSeparated(node.variables, EXPRESSION, |
| 601 newInForInit: false, newAtStatementBegin: false); |
| 602 out("]"); |
| 603 } |
| 604 visitObjectDestructuring(ObjectDestructuring node) { |
| 605 out("{"); |
| 606 visitCommaSeparated(node.variables, EXPRESSION, |
| 607 newInForInit: false, newAtStatementBegin: false); |
| 608 out("}"); |
| 609 } |
| 610 |
| 611 visitDestructuredVariable(DestructuredVariable node) { |
| 612 var hasName = node.name != null; |
| 613 if (hasName) visit(node.name); |
| 614 if (node.structure != null) { |
| 615 if (hasName) { |
| 616 out(":"); |
| 617 spaceOut(); |
| 618 } |
| 619 visit(node.structure); |
| 620 } |
| 621 if (node.defaultValue != null) { |
| 622 spaceOut(); |
| 623 out("="); |
| 624 spaceOut(); |
| 625 visitNestedExpression(node.defaultValue, EXPRESSION, |
| 626 newInForInit: false, newAtStatementBegin: false); |
| 627 } |
| 628 } |
| 629 |
598 visitAssignment(Assignment assignment) { | 630 visitAssignment(Assignment assignment) { |
599 visitNestedExpression(assignment.leftHandSide, LEFT_HAND_SIDE, | 631 visitNestedExpression(assignment.leftHandSide, LEFT_HAND_SIDE, |
600 newInForInit: inForInit, | 632 newInForInit: inForInit, |
601 newAtStatementBegin: atStatementBegin); | 633 newAtStatementBegin: atStatementBegin); |
602 if (assignment.value != null) { | 634 if (assignment.value != null) { |
603 spaceOut(); | 635 spaceOut(); |
604 String op = assignment.op; | 636 String op = assignment.op; |
605 if (op != null) out(op); | 637 if (op != null) out(op); |
606 out("="); | 638 out("="); |
607 spaceOut(); | 639 spaceOut(); |
(...skipping 857 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1465 return newName; | 1497 return newName; |
1466 } | 1498 } |
1467 } | 1499 } |
1468 | 1500 |
1469 /// Like [BaseVisitor], but calls [declare] for [Identifier] declarations, and | 1501 /// Like [BaseVisitor], but calls [declare] for [Identifier] declarations, and |
1470 /// [visitIdentifier] otherwise. | 1502 /// [visitIdentifier] otherwise. |
1471 abstract class VariableDeclarationVisitor<T> extends BaseVisitor<T> { | 1503 abstract class VariableDeclarationVisitor<T> extends BaseVisitor<T> { |
1472 declare(Identifier node); | 1504 declare(Identifier node); |
1473 | 1505 |
1474 visitFunctionExpression(FunctionExpression node) { | 1506 visitFunctionExpression(FunctionExpression node) { |
1475 for (var p in node.params) { | 1507 node.params.forEach(_scanDeclarator); |
1476 declare(p is RestParameter ? p.parameter : p); | |
1477 } | |
1478 node.body.accept(this); | 1508 node.body.accept(this); |
1479 } | 1509 } |
1480 | 1510 |
| 1511 _scanDeclarator(Declarator d) { |
| 1512 if (d is Identifier) declare(d); |
| 1513 if (d is RestParameter) _scanDeclarator(d.parameter); |
| 1514 else if (d is Destructuring) { |
| 1515 for (var v in d.variables) { |
| 1516 if (v.name != null) declare(v.name); |
| 1517 if (v.structure != null) _scanDeclarator(v.structure); |
| 1518 } |
| 1519 } |
| 1520 } |
| 1521 |
1481 visitVariableInitialization(VariableInitialization node) { | 1522 visitVariableInitialization(VariableInitialization node) { |
1482 declare(node.declaration); | 1523 _scanDeclarator(node.declaration); |
1483 if (node.value != null) node.value.accept(this); | 1524 if (node.value != null) node.value.accept(this); |
1484 } | 1525 } |
1485 | 1526 |
1486 visitCatch(Catch node) { | 1527 visitCatch(Catch node) { |
1487 declare(node.declaration); | 1528 declare(node.declaration); |
1488 node.body.accept(this); | 1529 node.body.accept(this); |
1489 } | 1530 } |
1490 | 1531 |
1491 visitFunctionDeclaration(FunctionDeclaration node) { | 1532 visitFunctionDeclaration(FunctionDeclaration node) { |
1492 declare(node.name); | 1533 declare(node.name); |
1493 node.function.accept(this); | 1534 node.function.accept(this); |
1494 } | 1535 } |
1495 | 1536 |
1496 visitNamedFunction(NamedFunction node) { | 1537 visitNamedFunction(NamedFunction node) { |
1497 declare(node.name); | 1538 declare(node.name); |
1498 node.function.accept(this); | 1539 node.function.accept(this); |
1499 } | 1540 } |
1500 | 1541 |
1501 visitClassExpression(ClassExpression node) { | 1542 visitClassExpression(ClassExpression node) { |
1502 declare(node.name); | 1543 declare(node.name); |
1503 if (node.heritage != null) node.heritage.accept(this); | 1544 if (node.heritage != null) node.heritage.accept(this); |
1504 for (Method element in node.methods) element.accept(this); | 1545 for (Method element in node.methods) element.accept(this); |
1505 } | 1546 } |
1506 } | 1547 } |
OLD | NEW |