| 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 abstract class Visitor<R> { | 5 abstract class Visitor<R> { |
| 6 R visitBlock(Block node); | 6 R visitBlock(Block node); |
| 7 R visitBreakStatement(BreakStatement node); | 7 R visitBreakStatement(BreakStatement node); |
| 8 R visitCascade(Cascade node); | 8 R visitCascade(Cascade node); |
| 9 R visitCascadeReceiver(CascadeReceiver node); | 9 R visitCascadeReceiver(CascadeReceiver node); |
| 10 R visitCaseMatch(CaseMatch node); | 10 R visitCaseMatch(CaseMatch node); |
| (...skipping 1575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1586 visitChildren(Visitor visitor) { | 1586 visitChildren(Visitor visitor) { |
| 1587 tag.accept(visitor); | 1587 tag.accept(visitor); |
| 1588 argument.accept(visitor); | 1588 argument.accept(visitor); |
| 1589 if (prefixIdentifier !== null) prefixIdentifier.accept(visitor); | 1589 if (prefixIdentifier !== null) prefixIdentifier.accept(visitor); |
| 1590 if (prefix !== null) prefix.accept(visitor); | 1590 if (prefix !== null) prefix.accept(visitor); |
| 1591 } | 1591 } |
| 1592 | 1592 |
| 1593 Token getBeginToken() => beginToken; | 1593 Token getBeginToken() => beginToken; |
| 1594 | 1594 |
| 1595 Token getEndToken() => endToken; | 1595 Token getEndToken() => endToken; |
| 1596 | |
| 1597 LibraryTag toLibraryTag() { | |
| 1598 if (isImport()) { | |
| 1599 Identifier prefixNode; | |
| 1600 if (prefix !== null) { | |
| 1601 SourceString source = prefix.dartString.source; | |
| 1602 Token token = new StringToken.fromSource(IDENTIFIER_INFO, source, | |
| 1603 prefix.token.charOffset); | |
| 1604 token.next = prefix.token.next; | |
| 1605 prefixNode = new Identifier(token); | |
| 1606 } | |
| 1607 return new Import(tag.token, argument, prefixNode, null); | |
| 1608 } else if (isLibrary()) { | |
| 1609 return new LibraryName(tag.token, argument); | |
| 1610 } else if (isSource()) { | |
| 1611 return new Part(tag.token, argument); | |
| 1612 } else { | |
| 1613 throw 'Unknown script tag ${tag.token.slowToString()}'; | |
| 1614 } | |
| 1615 } | |
| 1616 } | |
| 1617 | |
| 1618 class LibraryTag extends Node { | |
| 1619 bool get isLibraryName => false; | |
| 1620 bool get isImport => false; | |
| 1621 bool get isExport => false; | |
| 1622 bool get isPart => false; | |
| 1623 } | |
| 1624 | |
| 1625 class LibraryName extends LibraryTag { | |
| 1626 final Expression name; | |
| 1627 | |
| 1628 final Token libraryKeyword; | |
| 1629 | |
| 1630 LibraryName(this.libraryKeyword, this.name); | |
| 1631 | |
| 1632 bool get isLibraryName => true; | |
| 1633 | |
| 1634 LibraryName asLibraryName() => this; | |
| 1635 | |
| 1636 accept(Visitor visitor) => visitor.visitLibraryName(this); | |
| 1637 | |
| 1638 visitChildren(Visitor visitor) => name.accept(visitor); | |
| 1639 | |
| 1640 Token getBeginToken() => libraryKeyword; | |
| 1641 | |
| 1642 Token getEndToken() => name.getEndToken().next; | |
| 1643 } | |
| 1644 | |
| 1645 class Import extends LibraryTag { | |
| 1646 final LiteralString uri; | |
| 1647 final Identifier prefix; | |
| 1648 final NodeList combinators; | |
| 1649 | |
| 1650 final Token importKeyword; | |
| 1651 | |
| 1652 Import(this.importKeyword, this.uri, this.prefix, this.combinators); | |
| 1653 | |
| 1654 bool get isImport => true; | |
| 1655 | |
| 1656 Import asImport() => this; | |
| 1657 | |
| 1658 accept(Visitor visitor) => visitor.visitImport(this); | |
| 1659 | |
| 1660 visitChildren(Visitor visitor) { | |
| 1661 uri.accept(visitor); | |
| 1662 if (prefix !== null) prefix.accept(visitor); | |
| 1663 if (combinators !== null) combinators.accept(visitor); | |
| 1664 } | |
| 1665 | |
| 1666 Token getBeginToken() => importKeyword; | |
| 1667 | |
| 1668 Token getEndToken() { | |
| 1669 if (combinators !== null) return combinators.getEndToken().next; | |
| 1670 if (prefix !== null) return prefix.getEndToken().next; | |
| 1671 return uri.getEndToken().next; | |
| 1672 } | |
| 1673 } | |
| 1674 | |
| 1675 class Export extends LibraryTag { | |
| 1676 final LiteralString uri; | |
| 1677 final NodeList combinators; | |
| 1678 | |
| 1679 final Token exportKeyword; | |
| 1680 | |
| 1681 Export(this.exportKeyword, this.uri, this.combinators); | |
| 1682 | |
| 1683 bool get isExport => true; | |
| 1684 | |
| 1685 Export asExport() => this; | |
| 1686 | |
| 1687 accept(Visitor visitor) => visitor.visitExport(this); | |
| 1688 | |
| 1689 visitChildren(Visitor visitor) { | |
| 1690 uri.accept(visitor); | |
| 1691 if (combinators !== null) combinators.accept(visitor); | |
| 1692 } | |
| 1693 | |
| 1694 Token getBeginToken() => exportKeyword; | |
| 1695 | |
| 1696 Token getEndToken() { | |
| 1697 if (combinators !== null) return combinators.getEndToken().next; | |
| 1698 return uri.getEndToken().next; | |
| 1699 } | |
| 1700 } | |
| 1701 | |
| 1702 class Part extends LibraryTag { | |
| 1703 final LiteralString uri; | |
| 1704 | |
| 1705 final Token partKeyword; | |
| 1706 | |
| 1707 Part(this.partKeyword, this.uri); | |
| 1708 | |
| 1709 bool get isPart => true; | |
| 1710 | |
| 1711 Part asPart() => this; | |
| 1712 | |
| 1713 accept(Visitor visitor) => visitor.visitPart(this); | |
| 1714 | |
| 1715 visitChildren(Visitor visitor) => uri.accept(visitor); | |
| 1716 | |
| 1717 Token getBeginToken() => partKeyword; | |
| 1718 | |
| 1719 Token getEndToken() => uri.getEndToken().next; | |
| 1720 } | 1596 } |
| 1721 | 1597 |
| 1722 class Typedef extends Node { | 1598 class Typedef extends Node { |
| 1723 final TypeAnnotation returnType; | 1599 final TypeAnnotation returnType; |
| 1724 final Identifier name; | 1600 final Identifier name; |
| 1725 final NodeList typeParameters; | 1601 final NodeList typeParameters; |
| 1726 final NodeList formals; | 1602 final NodeList formals; |
| 1727 | 1603 |
| 1728 final Token typedefKeyword; | 1604 final Token typedefKeyword; |
| 1729 final Token endToken; | 1605 final Token endToken; |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1893 * argument). | 1769 * argument). |
| 1894 * | 1770 * |
| 1895 * TODO(ahe): This method is controversial, the team needs to discuss | 1771 * TODO(ahe): This method is controversial, the team needs to discuss |
| 1896 * if top-level methods are acceptable and what naming conventions to | 1772 * if top-level methods are acceptable and what naming conventions to |
| 1897 * use. | 1773 * use. |
| 1898 */ | 1774 */ |
| 1899 initializerDo(Node node, f(Node node)) { | 1775 initializerDo(Node node, f(Node node)) { |
| 1900 SendSet send = node.asSendSet(); | 1776 SendSet send = node.asSendSet(); |
| 1901 if (send !== null) return f(send.arguments.head); | 1777 if (send !== null) return f(send.arguments.head); |
| 1902 } | 1778 } |
| OLD | NEW |