| 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 library elements; | 5 library elements; |
| 6 | 6 |
| 7 import '../common.dart'; | 7 import '../common.dart'; |
| 8 import '../common/resolution.dart' show Resolution; | 8 import '../common/resolution.dart' show Resolution; |
| 9 import '../compiler.dart' show Compiler; | 9 import '../compiler.dart' show Compiler; |
| 10 import '../constants/constructors.dart'; | 10 import '../constants/constructors.dart'; |
| (...skipping 1181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1192 | 1192 |
| 1193 const AsyncMarker._({this.isAsync: false, this.isYielding: false}); | 1193 const AsyncMarker._({this.isAsync: false, this.isYielding: false}); |
| 1194 | 1194 |
| 1195 String toString() { | 1195 String toString() { |
| 1196 return '${isAsync ? 'async' : 'sync'}${isYielding ? '*' : ''}'; | 1196 return '${isAsync ? 'async' : 'sync'}${isYielding ? '*' : ''}'; |
| 1197 } | 1197 } |
| 1198 | 1198 |
| 1199 /// Canonical list of marker values. | 1199 /// Canonical list of marker values. |
| 1200 /// | 1200 /// |
| 1201 /// Added to make [AsyncMarker] enum-like. | 1201 /// Added to make [AsyncMarker] enum-like. |
| 1202 static const List<AsyncMarker> values = | 1202 static const List<AsyncMarker> values = const <AsyncMarker>[ |
| 1203 const <AsyncMarker>[SYNC, SYNC_STAR, ASYNC, ASYNC_STAR]; | 1203 SYNC, |
| 1204 | 1204 SYNC_STAR, |
| 1205 ASYNC, |
| 1206 ASYNC_STAR |
| 1207 ]; |
| 1205 | 1208 |
| 1206 /// Index to this marker within [values]. | 1209 /// Index to this marker within [values]. |
| 1207 /// | 1210 /// |
| 1208 /// Added to make [AsyncMarker] enum-like. | 1211 /// Added to make [AsyncMarker] enum-like. |
| 1209 int get index => values.indexOf(this); | 1212 int get index => values.indexOf(this); |
| 1210 } | 1213 } |
| 1211 | 1214 |
| 1212 /// A top level, static or instance function. | 1215 /// A top level, static or instance function. |
| 1213 abstract class MethodElement extends FunctionElement implements MemberElement {} | 1216 abstract class MethodElement extends FunctionElement implements MemberElement {} |
| 1214 | 1217 |
| (...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1653 } | 1656 } |
| 1654 | 1657 |
| 1655 /// [ResolvedAst] contains info that define the semantics of an element. | 1658 /// [ResolvedAst] contains info that define the semantics of an element. |
| 1656 abstract class ResolvedAst { | 1659 abstract class ResolvedAst { |
| 1657 /// The element whose semantics is defined. | 1660 /// The element whose semantics is defined. |
| 1658 Element get element; | 1661 Element get element; |
| 1659 | 1662 |
| 1660 /// The kind of semantics definition used for this object. | 1663 /// The kind of semantics definition used for this object. |
| 1661 ResolvedAstKind get kind; | 1664 ResolvedAstKind get kind; |
| 1662 | 1665 |
| 1663 /// The AST node for [element]. This only available of [kind] is | 1666 /// The root AST node for the declaration of [element]. This only available if |
| 1664 /// `ResolvedAstKind.PARSED`. | 1667 /// [kind] is `ResolvedAstKind.PARSED`. |
| 1665 Node get node; | 1668 Node get node; |
| 1666 | 1669 |
| 1670 /// The AST node for the 'body' of [element]. |
| 1671 /// |
| 1672 /// For functions and constructors this is the root AST node of the method |
| 1673 /// body, and for variables this is the root AST node of the initializer, if |
| 1674 /// available. |
| 1675 /// |
| 1676 /// This only available if [kind] is `ResolvedAstKind.PARSED`. |
| 1677 Node get body; |
| 1678 |
| 1667 /// The [TreeElements] containing the resolution data for [node]. This only | 1679 /// The [TreeElements] containing the resolution data for [node]. This only |
| 1668 /// available of [kind] is `ResolvedAstKind.PARSED`. | 1680 /// available of [kind] is `ResolvedAstKind.PARSED`. |
| 1669 TreeElements get elements; | 1681 TreeElements get elements; |
| 1670 } | 1682 } |
| 1671 | 1683 |
| 1672 /// [ResolvedAst] implementation used for elements whose semantics is defined in | 1684 /// [ResolvedAst] implementation used for elements whose semantics is defined in |
| 1673 /// terms an AST and a [TreeElements]. | 1685 /// terms an AST and a [TreeElements]. |
| 1674 class ParsedResolvedAst implements ResolvedAst { | 1686 class ParsedResolvedAst implements ResolvedAst { |
| 1675 final Element element; | 1687 final Element element; |
| 1676 final Node node; | 1688 final Node node; |
| 1689 final Node body; |
| 1677 final TreeElements elements; | 1690 final TreeElements elements; |
| 1678 | 1691 |
| 1679 ParsedResolvedAst(this.element, this.node, this.elements); | 1692 ParsedResolvedAst(this.element, this.node, this.body, this.elements); |
| 1680 | 1693 |
| 1681 ResolvedAstKind get kind => ResolvedAstKind.PARSED; | 1694 ResolvedAstKind get kind => ResolvedAstKind.PARSED; |
| 1682 | 1695 |
| 1683 String toString() => '$kind:$element:$node'; | 1696 String toString() => '$kind:$element:$node'; |
| 1684 } | 1697 } |
| 1685 | 1698 |
| 1686 /// [ResolvedAst] implementation used for synthesized elements whose semantics | 1699 /// [ResolvedAst] implementation used for synthesized elements whose semantics |
| 1687 /// is not defined in terms an AST and a [TreeElements]. | 1700 /// is not defined in terms an AST and a [TreeElements]. |
| 1688 class SynthesizedResolvedAst implements ResolvedAst { | 1701 class SynthesizedResolvedAst implements ResolvedAst { |
| 1689 final Element element; | 1702 final Element element; |
| 1690 final ResolvedAstKind kind; | 1703 final ResolvedAstKind kind; |
| 1691 | 1704 |
| 1692 SynthesizedResolvedAst(this.element, this.kind); | 1705 SynthesizedResolvedAst(this.element, this.kind); |
| 1693 | 1706 |
| 1694 @override | 1707 @override |
| 1695 TreeElements get elements { | 1708 TreeElements get elements { |
| 1696 throw new UnsupportedError('$this does not provide a TreeElements'); | 1709 throw new UnsupportedError('$this does not provide a TreeElements'); |
| 1697 } | 1710 } |
| 1698 | 1711 |
| 1699 @override | 1712 @override |
| 1700 Node get node { | 1713 Node get node { |
| 1701 throw new UnsupportedError('$this does not have an AST'); | 1714 throw new UnsupportedError('$this does not have a root AST node'); |
| 1715 } |
| 1716 |
| 1717 @override |
| 1718 Node get body { |
| 1719 throw new UnsupportedError('$this does not have a body AST node'); |
| 1702 } | 1720 } |
| 1703 | 1721 |
| 1704 String toString() => '$kind:$element'; | 1722 String toString() => '$kind:$element'; |
| 1705 } | 1723 } |
| 1706 | 1724 |
| 1707 /// A [MemberSignature] is a member of an interface. | 1725 /// A [MemberSignature] is a member of an interface. |
| 1708 /// | 1726 /// |
| 1709 /// A signature is either a method or a getter or setter, possibly implicitly | 1727 /// A signature is either a method or a getter or setter, possibly implicitly |
| 1710 /// defined by a field declarations. Fields themselves are not members of an | 1728 /// defined by a field declarations. Fields themselves are not members of an |
| 1711 /// interface. | 1729 /// interface. |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1776 /// by a field. | 1794 /// by a field. |
| 1777 bool get isDeclaredByField; | 1795 bool get isDeclaredByField; |
| 1778 | 1796 |
| 1779 /// Returns `true` if this member is abstract. | 1797 /// Returns `true` if this member is abstract. |
| 1780 bool get isAbstract; | 1798 bool get isAbstract; |
| 1781 | 1799 |
| 1782 /// If abstract, [implementation] points to the overridden concrete member, | 1800 /// If abstract, [implementation] points to the overridden concrete member, |
| 1783 /// if any. Otherwise [implementation] points to the member itself. | 1801 /// if any. Otherwise [implementation] points to the member itself. |
| 1784 Member get implementation; | 1802 Member get implementation; |
| 1785 } | 1803 } |
| OLD | NEW |