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

Side by Side Diff: pkg/compiler/lib/src/serialization/modelz.dart

Issue 1970703002: Store ResolvedAst on AstElement (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 4 years, 7 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
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 /// Implementation of the element model used for deserialiation. 5 /// Implementation of the element model used for deserialiation.
6 /// 6 ///
7 /// These classes are created by [ElementDeserializer] triggered by the 7 /// These classes are created by [ElementDeserializer] triggered by the
8 /// [Deserializer]. 8 /// [Deserializer].
9 9
10 library dart2js.serialization.modelz; 10 library dart2js.serialization.modelz;
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 } 242 }
243 243
244 abstract class AnalyzableElementMixin implements AnalyzableElement, ElementZ { 244 abstract class AnalyzableElementMixin implements AnalyzableElement, ElementZ {
245 @override 245 @override
246 bool get hasTreeElements => _unsupported('hasTreeElements'); 246 bool get hasTreeElements => _unsupported('hasTreeElements');
247 247
248 @override 248 @override
249 TreeElements get treeElements => _unsupported('treeElements'); 249 TreeElements get treeElements => _unsupported('treeElements');
250 } 250 }
251 251
252 abstract class AstElementMixin implements AstElement, ElementZ { 252 abstract class AstElementMixinZ implements AstElement, ElementZ {
253 ResolvedAst _resolvedAst;
254
253 // TODO(johnniwinther): This is needed for the token invariant assertion. Find 255 // TODO(johnniwinther): This is needed for the token invariant assertion. Find
254 // another way to bypass the test for modelz. 256 // another way to bypass the test for modelz.
255 @override 257 @override
256 bool get hasNode => false; 258 bool get hasNode => false;
257 259
258 @override 260 @override
259 bool get hasResolvedAst => _unsupported('hasResolvedAst'); 261 bool get hasResolvedAst => _resolvedAst != null;
260 262
261 @override 263 @override
262 get node => _unsupported('node'); 264 get node => _unsupported('node');
263 265
264 @override 266 @override
265 ResolvedAst get resolvedAst => _unsupported('resolvedAst'); 267 ResolvedAst get resolvedAst {
268 assert(invariant(this, _resolvedAst != null,
269 message: "ResolvedAst has not been set for $this."));
270 return _resolvedAst;
271 }
272
273 void set resolvedAst(ResolvedAst value) {
274 assert(invariant(this, _resolvedAst == null,
275 message: "ResolvedAst has already been set for $this."));
276 _resolvedAst = value;
277 }
266 } 278 }
267 279
268 abstract class ContainerMixin 280 abstract class ContainerMixin
269 implements DeserializedElementZ, ScopeContainerElement { 281 implements DeserializedElementZ, ScopeContainerElement {
270 MappedContainer _membersMap = new MappedContainer(); 282 MappedContainer _membersMap = new MappedContainer();
271 283
272 @override 284 @override
273 Element localLookup(String name) { 285 Element localLookup(String name) {
274 return _membersMap.lookup( 286 return _membersMap.lookup(
275 name, _decoder.getMap(Key.MEMBERS, isOptional: true)); 287 name, _decoder.getMap(Key.MEMBERS, isOptional: true));
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
794 806
795 @override 807 @override
796 void ensureResolved(Resolution resolution) { 808 void ensureResolved(Resolution resolution) {
797 resolution.registerClass(this); 809 resolution.registerClass(this);
798 } 810 }
799 } 811 }
800 812
801 class ClassElementZ extends DeserializedElementZ 813 class ClassElementZ extends DeserializedElementZ
802 with 814 with
803 AnalyzableElementMixin, 815 AnalyzableElementMixin,
804 AstElementMixin, 816 AstElementMixinZ,
805 ClassElementCommon, 817 ClassElementCommon,
806 class_members.ClassMemberMixin, 818 class_members.ClassMemberMixin,
807 ContainerMixin, 819 ContainerMixin,
808 LibraryMemberMixin, 820 LibraryMemberMixin,
809 TypeDeclarationMixin<InterfaceType>, 821 TypeDeclarationMixin<InterfaceType>,
810 ClassElementMixin 822 ClassElementMixin
811 implements ClassElement { 823 implements ClassElement {
812 bool _isObject; 824 bool _isObject;
813 DartType _supertype; 825 DartType _supertype;
814 OrderedTypeSet _allSupertypesAndSelf; 826 OrderedTypeSet _allSupertypesAndSelf;
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
915 InterfaceType get mixinType => _mixinType ??= _decoder.getType(Key.MIXIN); 927 InterfaceType get mixinType => _mixinType ??= _decoder.getType(Key.MIXIN);
916 } 928 }
917 929
918 class UnnamedMixinApplicationElementZ extends ElementZ 930 class UnnamedMixinApplicationElementZ extends ElementZ
919 with 931 with
920 ClassElementCommon, 932 ClassElementCommon,
921 ClassElementMixin, 933 ClassElementMixin,
922 class_members.ClassMemberMixin, 934 class_members.ClassMemberMixin,
923 TypeDeclarationMixin<InterfaceType>, 935 TypeDeclarationMixin<InterfaceType>,
924 AnalyzableElementMixin, 936 AnalyzableElementMixin,
925 AstElementMixin, 937 AstElementMixinZ,
926 MixinApplicationElementCommon, 938 MixinApplicationElementCommon,
927 MixinApplicationElementMixin { 939 MixinApplicationElementMixin {
928 final String name; 940 final String name;
929 final ClassElement _subclass; 941 final ClassElement _subclass;
930 final InterfaceType supertype; 942 final InterfaceType supertype;
931 final Link<DartType> interfaces; 943 final Link<DartType> interfaces;
932 OrderedTypeSet _allSupertypesAndSelf; 944 OrderedTypeSet _allSupertypesAndSelf;
933 Link<ConstructorElement> _constructors; 945 Link<ConstructorElement> _constructors;
934 946
935 UnnamedMixinApplicationElementZ( 947 UnnamedMixinApplicationElementZ(
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 if (_enumValues == null) { 1048 if (_enumValues == null) {
1037 _enumValues = _decoder.getElements(Key.FIELDS); 1049 _enumValues = _decoder.getElements(Key.FIELDS);
1038 } 1050 }
1039 return _enumValues; 1051 return _enumValues;
1040 } 1052 }
1041 } 1053 }
1042 1054
1043 abstract class ConstructorElementZ extends DeserializedElementZ 1055 abstract class ConstructorElementZ extends DeserializedElementZ
1044 with 1056 with
1045 AnalyzableElementMixin, 1057 AnalyzableElementMixin,
1046 AstElementMixin, 1058 AstElementMixinZ,
1047 ClassMemberMixin, 1059 ClassMemberMixin,
1048 FunctionTypedElementMixin, 1060 FunctionTypedElementMixin,
1049 ParametersMixin, 1061 ParametersMixin,
1050 TypedElementMixin, 1062 TypedElementMixin,
1051 MemberElementMixin 1063 MemberElementMixin
1052 implements 1064 implements
1053 ConstructorElement, 1065 ConstructorElement,
1054 // TODO(johnniwinther): Sort out whether a constructor is a method. 1066 // TODO(johnniwinther): Sort out whether a constructor is a method.
1055 MethodElement { 1067 MethodElement {
1056 ConstantConstructor _constantConstructor; 1068 ConstantConstructor _constantConstructor;
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1217 } 1229 }
1218 1230
1219 @override 1231 @override
1220 PrefixElement get redirectionDeferredPrefix { 1232 PrefixElement get redirectionDeferredPrefix {
1221 _ensureRedirection(); 1233 _ensureRedirection();
1222 return _redirectionDeferredPrefix; 1234 return _redirectionDeferredPrefix;
1223 } 1235 }
1224 } 1236 }
1225 1237
1226 class ForwardingConstructorElementZ extends ElementZ 1238 class ForwardingConstructorElementZ extends ElementZ
1227 with AnalyzableElementMixin, AstElementMixin 1239 with AnalyzableElementMixin, AstElementMixinZ
1228 implements ConstructorElement { 1240 implements ConstructorElement {
1229 final MixinApplicationElement enclosingClass; 1241 final MixinApplicationElement enclosingClass;
1230 final ConstructorElement definingConstructor; 1242 final ConstructorElement definingConstructor;
1231 1243
1232 ForwardingConstructorElementZ(this.enclosingClass, this.definingConstructor); 1244 ForwardingConstructorElementZ(this.enclosingClass, this.definingConstructor);
1233 1245
1234 @override 1246 @override
1235 CompilationUnitElement get compilationUnit => enclosingClass.compilationUnit; 1247 CompilationUnitElement get compilationUnit => enclosingClass.compilationUnit;
1236 1248
1237 @override 1249 @override
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1352 @override 1364 @override
1353 Name get memberName => new Name(name, library); 1365 Name get memberName => new Name(name, library);
1354 1366
1355 @override 1367 @override
1356 List<FunctionElement> get nestedClosures => <FunctionElement>[]; 1368 List<FunctionElement> get nestedClosures => <FunctionElement>[];
1357 } 1369 }
1358 1370
1359 abstract class FieldElementZ extends DeserializedElementZ 1371 abstract class FieldElementZ extends DeserializedElementZ
1360 with 1372 with
1361 AnalyzableElementMixin, 1373 AnalyzableElementMixin,
1362 AstElementMixin, 1374 AstElementMixinZ,
1363 TypedElementMixin, 1375 TypedElementMixin,
1364 MemberElementMixin 1376 MemberElementMixin
1365 implements FieldElement { 1377 implements FieldElement {
1366 bool _isConst; 1378 bool _isConst;
1367 ConstantExpression _constant; 1379 ConstantExpression _constant;
1368 1380
1369 FieldElementZ(ObjectDecoder decoder) : super(decoder); 1381 FieldElementZ(ObjectDecoder decoder) : super(decoder);
1370 1382
1371 @override 1383 @override
1372 ElementKind get kind => ElementKind.FIELD; 1384 ElementKind get kind => ElementKind.FIELD;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1419 } 1431 }
1420 1432
1421 class InstanceFieldElementZ extends FieldElementZ 1433 class InstanceFieldElementZ extends FieldElementZ
1422 with ClassMemberMixin, InstanceMemberMixin { 1434 with ClassMemberMixin, InstanceMemberMixin {
1423 InstanceFieldElementZ(ObjectDecoder decoder) : super(decoder); 1435 InstanceFieldElementZ(ObjectDecoder decoder) : super(decoder);
1424 } 1436 }
1425 1437
1426 abstract class FunctionElementZ extends DeserializedElementZ 1438 abstract class FunctionElementZ extends DeserializedElementZ
1427 with 1439 with
1428 AnalyzableElementMixin, 1440 AnalyzableElementMixin,
1429 AstElementMixin, 1441 AstElementMixinZ,
1430 ParametersMixin, 1442 ParametersMixin,
1431 FunctionTypedElementMixin, 1443 FunctionTypedElementMixin,
1432 TypedElementMixin, 1444 TypedElementMixin,
1433 MemberElementMixin 1445 MemberElementMixin
1434 implements MethodElement { 1446 implements MethodElement {
1435 FunctionElementZ(ObjectDecoder decoder) : super(decoder); 1447 FunctionElementZ(ObjectDecoder decoder) : super(decoder);
1436 1448
1437 @override 1449 @override
1438 ElementKind get kind => ElementKind.FUNCTION; 1450 ElementKind get kind => ElementKind.FUNCTION;
1439 1451
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1498 @override 1510 @override
1499 bool get hasTreeElements => memberContext.hasTreeElements; 1511 bool get hasTreeElements => memberContext.hasTreeElements;
1500 1512
1501 @override 1513 @override
1502 TreeElements get treeElements => memberContext.treeElements; 1514 TreeElements get treeElements => memberContext.treeElements;
1503 } 1515 }
1504 1516
1505 class LocalFunctionElementZ extends DeserializedElementZ 1517 class LocalFunctionElementZ extends DeserializedElementZ
1506 with 1518 with
1507 LocalExecutableMixin, 1519 LocalExecutableMixin,
1508 AstElementMixin, 1520 AstElementMixinZ,
1509 ParametersMixin, 1521 ParametersMixin,
1510 FunctionTypedElementMixin, 1522 FunctionTypedElementMixin,
1511 TypedElementMixin 1523 TypedElementMixin
1512 implements LocalFunctionElement { 1524 implements LocalFunctionElement {
1513 LocalFunctionElementZ(ObjectDecoder decoder) : super(decoder); 1525 LocalFunctionElementZ(ObjectDecoder decoder) : super(decoder);
1514 1526
1515 @override 1527 @override
1516 accept(ElementVisitor visitor, arg) { 1528 accept(ElementVisitor visitor, arg) {
1517 return visitor.visitLocalFunctionElement(this, arg); 1529 return visitor.visitLocalFunctionElement(this, arg);
1518 } 1530 }
1519 1531
1520 @override 1532 @override
1521 ElementKind get kind => ElementKind.FUNCTION; 1533 ElementKind get kind => ElementKind.FUNCTION;
1522 1534
1523 @override 1535 @override
1524 AsyncMarker get asyncMarker { 1536 AsyncMarker get asyncMarker {
1525 return _decoder.getEnum(Key.ASYNC_MARKER, AsyncMarker.values); 1537 return _decoder.getEnum(Key.ASYNC_MARKER, AsyncMarker.values);
1526 } 1538 }
1527 } 1539 }
1528 1540
1529 abstract class GetterElementZ extends DeserializedElementZ 1541 abstract class GetterElementZ extends DeserializedElementZ
1530 with 1542 with
1531 AnalyzableElementMixin, 1543 AnalyzableElementMixin,
1532 AstElementMixin, 1544 AstElementMixinZ,
1533 FunctionTypedElementMixin, 1545 FunctionTypedElementMixin,
1534 ParametersMixin, 1546 ParametersMixin,
1535 TypedElementMixin, 1547 TypedElementMixin,
1536 MemberElementMixin 1548 MemberElementMixin
1537 implements GetterElement { 1549 implements GetterElement {
1538 AbstractFieldElement abstractField; 1550 AbstractFieldElement abstractField;
1539 SetterElement setter; 1551 SetterElement setter;
1540 1552
1541 GetterElementZ(ObjectDecoder decoder) : super(decoder); 1553 GetterElementZ(ObjectDecoder decoder) : super(decoder);
1542 1554
(...skipping 19 matching lines...) Expand all
1562 } 1574 }
1563 1575
1564 class InstanceGetterElementZ extends GetterElementZ 1576 class InstanceGetterElementZ extends GetterElementZ
1565 with ClassMemberMixin, InstanceMemberMixin { 1577 with ClassMemberMixin, InstanceMemberMixin {
1566 InstanceGetterElementZ(ObjectDecoder decoder) : super(decoder); 1578 InstanceGetterElementZ(ObjectDecoder decoder) : super(decoder);
1567 } 1579 }
1568 1580
1569 abstract class SetterElementZ extends DeserializedElementZ 1581 abstract class SetterElementZ extends DeserializedElementZ
1570 with 1582 with
1571 AnalyzableElementMixin, 1583 AnalyzableElementMixin,
1572 AstElementMixin, 1584 AstElementMixinZ,
1573 FunctionTypedElementMixin, 1585 FunctionTypedElementMixin,
1574 ParametersMixin, 1586 ParametersMixin,
1575 TypedElementMixin, 1587 TypedElementMixin,
1576 MemberElementMixin 1588 MemberElementMixin
1577 implements SetterElement { 1589 implements SetterElement {
1578 AbstractFieldElement abstractField; 1590 AbstractFieldElement abstractField;
1579 GetterElement getter; 1591 GetterElement getter;
1580 1592
1581 SetterElementZ(ObjectDecoder decoder) : super(decoder); 1593 SetterElementZ(ObjectDecoder decoder) : super(decoder);
1582 1594
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1654 @override 1666 @override
1655 T computeType(Resolution resolution) => thisType; 1667 T computeType(Resolution resolution) => thisType;
1656 1668
1657 @override 1669 @override
1658 bool get isResolved => true; 1670 bool get isResolved => true;
1659 } 1671 }
1660 1672
1661 class TypedefElementZ extends DeserializedElementZ 1673 class TypedefElementZ extends DeserializedElementZ
1662 with 1674 with
1663 AnalyzableElementMixin, 1675 AnalyzableElementMixin,
1664 AstElementMixin, 1676 AstElementMixinZ,
1665 LibraryMemberMixin, 1677 LibraryMemberMixin,
1666 ParametersMixin, 1678 ParametersMixin,
1667 TypeDeclarationMixin<TypedefType> 1679 TypeDeclarationMixin<TypedefType>
1668 implements TypedefElement { 1680 implements TypedefElement {
1669 DartType _alias; 1681 DartType _alias;
1670 1682
1671 TypedefElementZ(ObjectDecoder decoder) : super(decoder); 1683 TypedefElementZ(ObjectDecoder decoder) : super(decoder);
1672 1684
1673 TypedefType _createType(List<DartType> typeArguments) { 1685 TypedefType _createType(List<DartType> typeArguments) {
1674 return new TypedefType(this, typeArguments); 1686 return new TypedefType(this, typeArguments);
(...skipping 21 matching lines...) Expand all
1696 } 1708 }
1697 1709
1698 @override 1710 @override
1699 void ensureResolved(Resolution resolution) {} 1711 void ensureResolved(Resolution resolution) {}
1700 1712
1701 @override 1713 @override
1702 void checkCyclicReference(Resolution resolution) {} 1714 void checkCyclicReference(Resolution resolution) {}
1703 } 1715 }
1704 1716
1705 class TypeVariableElementZ extends DeserializedElementZ 1717 class TypeVariableElementZ extends DeserializedElementZ
1706 with AnalyzableElementMixin, AstElementMixin, TypedElementMixin 1718 with AnalyzableElementMixin, AstElementMixinZ, TypedElementMixin
1707 implements TypeVariableElement { 1719 implements TypeVariableElement {
1708 TypeDeclarationElement _typeDeclaration; 1720 TypeDeclarationElement _typeDeclaration;
1709 TypeVariableType _type; 1721 TypeVariableType _type;
1710 DartType _bound; 1722 DartType _bound;
1711 Name _memberName; 1723 Name _memberName;
1712 1724
1713 TypeVariableElementZ(ObjectDecoder decoder) : super(decoder); 1725 TypeVariableElementZ(ObjectDecoder decoder) : super(decoder);
1714 1726
1715 Name get memberName { 1727 Name get memberName {
1716 if (_memberName == null) { 1728 if (_memberName == null) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1754 _bound = _decoder.getType(Key.BOUND); 1766 _bound = _decoder.getType(Key.BOUND);
1755 } 1767 }
1756 return _bound; 1768 return _bound;
1757 } 1769 }
1758 1770
1759 @override 1771 @override
1760 LibraryElement get library => typeDeclaration.library; 1772 LibraryElement get library => typeDeclaration.library;
1761 } 1773 }
1762 1774
1763 class SyntheticTypeVariableElementZ extends ElementZ 1775 class SyntheticTypeVariableElementZ extends ElementZ
1764 with AnalyzableElementMixin, AstElementMixin 1776 with AnalyzableElementMixin, AstElementMixinZ
1765 implements TypeVariableElement { 1777 implements TypeVariableElement {
1766 final TypeDeclarationElement typeDeclaration; 1778 final TypeDeclarationElement typeDeclaration;
1767 final int index; 1779 final int index;
1768 final String name; 1780 final String name;
1769 TypeVariableType _type; 1781 TypeVariableType _type;
1770 DartType _bound; 1782 DartType _bound;
1771 Name _memberName; 1783 Name _memberName;
1772 1784
1773 SyntheticTypeVariableElementZ(this.typeDeclaration, this.index, this.name); 1785 SyntheticTypeVariableElementZ(this.typeDeclaration, this.index, this.name);
1774 1786
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1818 LibraryElement get library => typeDeclaration.library; 1830 LibraryElement get library => typeDeclaration.library;
1819 1831
1820 @override 1832 @override
1821 int get sourceOffset => typeDeclaration.sourceOffset; 1833 int get sourceOffset => typeDeclaration.sourceOffset;
1822 1834
1823 @override 1835 @override
1824 SourceSpan get sourcePosition => typeDeclaration.sourcePosition; 1836 SourceSpan get sourcePosition => typeDeclaration.sourcePosition;
1825 } 1837 }
1826 1838
1827 abstract class ParameterElementZ extends DeserializedElementZ 1839 abstract class ParameterElementZ extends DeserializedElementZ
1828 with AnalyzableElementMixin, AstElementMixin, TypedElementMixin 1840 with AnalyzableElementMixin, AstElementMixinZ, TypedElementMixin
1829 implements ParameterElement { 1841 implements ParameterElement {
1830 FunctionElement _functionDeclaration; 1842 FunctionElement _functionDeclaration;
1831 ConstantExpression _constant; 1843 ConstantExpression _constant;
1832 DartType _type; 1844 DartType _type;
1833 1845
1834 ParameterElementZ(ObjectDecoder decoder) : super(decoder); 1846 ParameterElementZ(ObjectDecoder decoder) : super(decoder);
1835 1847
1836 @override 1848 @override
1837 bool get isFinal => _decoder.getBool(Key.IS_FINAL); 1849 bool get isFinal => _decoder.getBool(Key.IS_FINAL);
1838 1850
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1931 return visitor.visitFieldParameterElement(this, arg); 1943 return visitor.visitFieldParameterElement(this, arg);
1932 } 1944 }
1933 1945
1934 @override 1946 @override
1935 ElementKind get kind => ElementKind.INITIALIZING_FORMAL; 1947 ElementKind get kind => ElementKind.INITIALIZING_FORMAL;
1936 } 1948 }
1937 1949
1938 class LocalVariableElementZ extends DeserializedElementZ 1950 class LocalVariableElementZ extends DeserializedElementZ
1939 with 1951 with
1940 AnalyzableElementMixin, 1952 AnalyzableElementMixin,
1941 AstElementMixin, 1953 AstElementMixinZ,
1942 LocalExecutableMixin, 1954 LocalExecutableMixin,
1943 TypedElementMixin 1955 TypedElementMixin
1944 implements LocalVariableElement { 1956 implements LocalVariableElement {
1945 bool _isConst; 1957 bool _isConst;
1946 ConstantExpression _constant; 1958 ConstantExpression _constant;
1947 1959
1948 LocalVariableElementZ(ObjectDecoder decoder) : super(decoder); 1960 LocalVariableElementZ(ObjectDecoder decoder) : super(decoder);
1949 1961
1950 @override 1962 @override
1951 accept(ElementVisitor visitor, arg) { 1963 accept(ElementVisitor visitor, arg) {
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
2109 } 2121 }
2110 2122
2111 @override 2123 @override
2112 ElementKind get kind => ElementKind.PREFIX; 2124 ElementKind get kind => ElementKind.PREFIX;
2113 2125
2114 @override 2126 @override
2115 Element lookupLocalMember(String memberName) { 2127 Element lookupLocalMember(String memberName) {
2116 return _unsupported('lookupLocalMember'); 2128 return _unsupported('lookupLocalMember');
2117 } 2129 }
2118 } 2130 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_backend/backend.dart ('k') | pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698