OLD | NEW |
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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 dart2js.kernel.element_map; | 5 library dart2js.kernel.element_map; |
6 | 6 |
7 import 'package:kernel/ast.dart' as ir; | 7 import 'package:kernel/ast.dart' as ir; |
8 import 'package:kernel/clone.dart'; | 8 import 'package:kernel/clone.dart'; |
9 import 'package:kernel/type_algebra.dart'; | 9 import 'package:kernel/type_algebra.dart'; |
10 | 10 |
(...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
749 ResolutionImpact computeWorldImpact(KMember member) { | 749 ResolutionImpact computeWorldImpact(KMember member) { |
750 return _memberList[member.memberIndex].getWorldImpact(this); | 750 return _memberList[member.memberIndex].getWorldImpact(this); |
751 } | 751 } |
752 | 752 |
753 @override | 753 @override |
754 Spannable getSpannable(MemberEntity member, ir.Node node) { | 754 Spannable getSpannable(MemberEntity member, ir.Node node) { |
755 return member; | 755 return member; |
756 } | 756 } |
757 | 757 |
758 @override | 758 @override |
759 ir.Member getMemberNode(KMember member) { | 759 ir.Member getMemberNode(covariant KMember member) { |
760 return _memberList[member.memberIndex].node; | 760 return _memberList[member.memberIndex].node; |
761 } | 761 } |
762 | 762 |
763 /// Returns the kernel IR node that defines the [cls]. | 763 /// Returns the kernel IR node that defines the [cls]. |
764 ir.Class getClassNode(KClass cls) { | 764 ir.Class getClassNode(KClass cls) { |
765 return _classEnvs[cls.classIndex].cls; | 765 return _classEnvs[cls.classIndex].cls; |
766 } | 766 } |
767 } | 767 } |
768 | 768 |
769 /// Environment for fast lookup of program libraries. | 769 /// Environment for fast lookup of program libraries. |
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1183 InterfaceType getRawType(ClassEntity cls) { | 1183 InterfaceType getRawType(ClassEntity cls) { |
1184 return elementMap._getRawType(cls); | 1184 return elementMap._getRawType(cls); |
1185 } | 1185 } |
1186 | 1186 |
1187 @override | 1187 @override |
1188 bool isGenericClass(ClassEntity cls) { | 1188 bool isGenericClass(ClassEntity cls) { |
1189 return getThisType(cls).typeArguments.isNotEmpty; | 1189 return getThisType(cls).typeArguments.isNotEmpty; |
1190 } | 1190 } |
1191 | 1191 |
1192 @override | 1192 @override |
1193 bool isMixinApplication(KClass cls) { | 1193 bool isMixinApplication(covariant KClass cls) { |
1194 return elementMap._isMixinApplication(cls); | 1194 return elementMap._isMixinApplication(cls); |
1195 } | 1195 } |
1196 | 1196 |
1197 @override | 1197 @override |
1198 bool isUnnamedMixinApplication(KClass cls) { | 1198 bool isUnnamedMixinApplication(covariant KClass cls) { |
1199 return elementMap._isUnnamedMixinApplication(cls); | 1199 return elementMap._isUnnamedMixinApplication(cls); |
1200 } | 1200 } |
1201 | 1201 |
1202 @override | 1202 @override |
1203 ClassEntity getEffectiveMixinClass(ClassEntity cls) { | 1203 ClassEntity getEffectiveMixinClass(ClassEntity cls) { |
1204 if (!isMixinApplication(cls)) return null; | 1204 if (!isMixinApplication(cls)) return null; |
1205 do { | 1205 do { |
1206 cls = elementMap._getAppliedMixin(cls); | 1206 cls = elementMap._getAppliedMixin(cls); |
1207 } while (isMixinApplication(cls)); | 1207 } while (isMixinApplication(cls)); |
1208 return cls; | 1208 return cls; |
1209 } | 1209 } |
1210 | 1210 |
1211 @override | 1211 @override |
1212 DartType getTypeVariableBound(TypeVariableEntity typeVariable) { | 1212 DartType getTypeVariableBound(TypeVariableEntity typeVariable) { |
1213 throw new UnimplementedError( | 1213 throw new UnimplementedError( |
1214 'KernelElementEnvironment.getTypeVariableBound'); | 1214 'KernelElementEnvironment.getTypeVariableBound'); |
1215 } | 1215 } |
1216 | 1216 |
1217 @override | 1217 @override |
1218 InterfaceType createInterfaceType( | 1218 InterfaceType createInterfaceType( |
1219 ClassEntity cls, List<DartType> typeArguments) { | 1219 ClassEntity cls, List<DartType> typeArguments) { |
1220 return new InterfaceType(cls, typeArguments); | 1220 return new InterfaceType(cls, typeArguments); |
1221 } | 1221 } |
1222 | 1222 |
1223 @override | 1223 @override |
1224 FunctionType getFunctionType(KFunction function) { | 1224 FunctionType getFunctionType(covariant KFunction function) { |
1225 return elementMap._getFunctionType(function); | 1225 return elementMap._getFunctionType(function); |
1226 } | 1226 } |
1227 | 1227 |
1228 @override | 1228 @override |
1229 FunctionType getLocalFunctionType(KLocalFunction function) { | 1229 FunctionType getLocalFunctionType(covariant KLocalFunction function) { |
1230 return function.functionType; | 1230 return function.functionType; |
1231 } | 1231 } |
1232 | 1232 |
1233 @override | 1233 @override |
1234 DartType getUnaliasedType(DartType type) => type; | 1234 DartType getUnaliasedType(DartType type) => type; |
1235 | 1235 |
1236 @override | 1236 @override |
1237 ConstructorEntity lookupConstructor(ClassEntity cls, String name, | 1237 ConstructorEntity lookupConstructor(ClassEntity cls, String name, |
1238 {bool required: false}) { | 1238 {bool required: false}) { |
1239 ConstructorEntity constructor = elementMap.lookupConstructor(cls, name); | 1239 ConstructorEntity constructor = elementMap.lookupConstructor(cls, name); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1316 {bool required: false}) { | 1316 {bool required: false}) { |
1317 ClassEntity cls = elementMap.lookupClass(library, name); | 1317 ClassEntity cls = elementMap.lookupClass(library, name); |
1318 if (cls == null && required) { | 1318 if (cls == null && required) { |
1319 throw new SpannableAssertionFailure(CURRENT_ELEMENT_SPANNABLE, | 1319 throw new SpannableAssertionFailure(CURRENT_ELEMENT_SPANNABLE, |
1320 "The class '$name' was not found in library '${library.name}'."); | 1320 "The class '$name' was not found in library '${library.name}'."); |
1321 } | 1321 } |
1322 return cls; | 1322 return cls; |
1323 } | 1323 } |
1324 | 1324 |
1325 @override | 1325 @override |
1326 void forEachClass(KLibrary library, void f(ClassEntity cls)) { | 1326 void forEachClass(covariant KLibrary library, void f(ClassEntity cls)) { |
1327 elementMap._forEachClass(library, f); | 1327 elementMap._forEachClass(library, f); |
1328 } | 1328 } |
1329 | 1329 |
1330 @override | 1330 @override |
1331 LibraryEntity lookupLibrary(Uri uri, {bool required: false}) { | 1331 LibraryEntity lookupLibrary(Uri uri, {bool required: false}) { |
1332 LibraryEntity library = elementMap.lookupLibrary(uri); | 1332 LibraryEntity library = elementMap.lookupLibrary(uri); |
1333 if (library == null && required) { | 1333 if (library == null && required) { |
1334 throw new SpannableAssertionFailure( | 1334 throw new SpannableAssertionFailure( |
1335 CURRENT_ELEMENT_SPANNABLE, "The library '$uri' was not found."); | 1335 CURRENT_ELEMENT_SPANNABLE, "The library '$uri' was not found."); |
1336 } | 1336 } |
1337 return library; | 1337 return library; |
1338 } | 1338 } |
1339 | 1339 |
1340 @override | 1340 @override |
1341 bool isDeferredLoadLibraryGetter(KMember member) { | 1341 bool isDeferredLoadLibraryGetter(covariant KMember member) { |
1342 // TODO(johnniwinther): Support these. | 1342 // TODO(johnniwinther): Support these. |
1343 return false; | 1343 return false; |
1344 } | 1344 } |
1345 | 1345 |
1346 @override | 1346 @override |
1347 Iterable<ConstantValue> getMemberMetadata(KMember member) { | 1347 Iterable<ConstantValue> getMemberMetadata(covariant KMember member) { |
1348 _MemberData memberData = elementMap._memberList[member.memberIndex]; | 1348 _MemberData memberData = elementMap._memberList[member.memberIndex]; |
1349 return memberData.getMetadata(elementMap); | 1349 return memberData.getMetadata(elementMap); |
1350 } | 1350 } |
1351 } | 1351 } |
1352 | 1352 |
1353 /// Visitor that converts kernel dart types into [DartType]. | 1353 /// Visitor that converts kernel dart types into [DartType]. |
1354 class DartTypeConverter extends ir.DartTypeVisitor<DartType> { | 1354 class DartTypeConverter extends ir.DartTypeVisitor<DartType> { |
1355 final KernelToElementMapImpl elementAdapter; | 1355 final KernelToElementMapImpl elementAdapter; |
1356 bool topLevel = true; | 1356 bool topLevel = true; |
1357 | 1357 |
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1701 KernelNativeMemberResolver( | 1701 KernelNativeMemberResolver( |
1702 this.elementMap, this.nativeBasicData, this.nativeDataBuilder); | 1702 this.elementMap, this.nativeBasicData, this.nativeDataBuilder); |
1703 | 1703 |
1704 @override | 1704 @override |
1705 ElementEnvironment get elementEnvironment => elementMap.elementEnvironment; | 1705 ElementEnvironment get elementEnvironment => elementMap.elementEnvironment; |
1706 | 1706 |
1707 @override | 1707 @override |
1708 CommonElements get commonElements => elementMap.commonElements; | 1708 CommonElements get commonElements => elementMap.commonElements; |
1709 | 1709 |
1710 @override | 1710 @override |
1711 native.NativeBehavior computeNativeFieldStoreBehavior(KField field) { | 1711 native.NativeBehavior computeNativeFieldStoreBehavior( |
| 1712 covariant KField field) { |
1712 ir.Field node = elementMap._memberList[field.memberIndex].node; | 1713 ir.Field node = elementMap._memberList[field.memberIndex].node; |
1713 return elementMap.getNativeBehaviorForFieldStore(node); | 1714 return elementMap.getNativeBehaviorForFieldStore(node); |
1714 } | 1715 } |
1715 | 1716 |
1716 @override | 1717 @override |
1717 native.NativeBehavior computeNativeFieldLoadBehavior(KField field, | 1718 native.NativeBehavior computeNativeFieldLoadBehavior(covariant KField field, |
1718 {bool isJsInterop}) { | 1719 {bool isJsInterop}) { |
1719 ir.Field node = elementMap._memberList[field.memberIndex].node; | 1720 ir.Field node = elementMap._memberList[field.memberIndex].node; |
1720 return elementMap.getNativeBehaviorForFieldLoad(node, | 1721 return elementMap.getNativeBehaviorForFieldLoad(node, |
1721 isJsInterop: isJsInterop); | 1722 isJsInterop: isJsInterop); |
1722 } | 1723 } |
1723 | 1724 |
1724 @override | 1725 @override |
1725 native.NativeBehavior computeNativeMethodBehavior(KFunction function, | 1726 native.NativeBehavior computeNativeMethodBehavior( |
| 1727 covariant KFunction function, |
1726 {bool isJsInterop}) { | 1728 {bool isJsInterop}) { |
1727 ir.Member node = elementMap._memberList[function.memberIndex].node; | 1729 ir.Member node = elementMap._memberList[function.memberIndex].node; |
1728 return elementMap.getNativeBehaviorForMethod(node, | 1730 return elementMap.getNativeBehaviorForMethod(node, |
1729 isJsInterop: isJsInterop); | 1731 isJsInterop: isJsInterop); |
1730 } | 1732 } |
1731 | 1733 |
1732 @override | 1734 @override |
1733 bool isNativeMethod(KFunction function) { | 1735 bool isNativeMethod(covariant KFunction function) { |
1734 if (!native.maybeEnableNative(function.library.canonicalUri)) return false; | 1736 if (!native.maybeEnableNative(function.library.canonicalUri)) return false; |
1735 ir.Member node = elementMap._memberList[function.memberIndex].node; | 1737 ir.Member node = elementMap._memberList[function.memberIndex].node; |
1736 return node.isExternal && | 1738 return node.isExternal && |
1737 !elementMap.isForeignLibrary(node.enclosingLibrary); | 1739 !elementMap.isForeignLibrary(node.enclosingLibrary); |
1738 } | 1740 } |
1739 | 1741 |
1740 @override | 1742 @override |
1741 bool isJsInteropMember(MemberEntity element) { | 1743 bool isJsInteropMember(MemberEntity element) { |
1742 // TODO(johnniwinther): Compute this. | 1744 // TODO(johnniwinther): Compute this. |
1743 return false; | 1745 return false; |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1863 @override | 1865 @override |
1864 DiagnosticReporter get reporter { | 1866 DiagnosticReporter get reporter { |
1865 return _elementMap.reporter; | 1867 return _elementMap.reporter; |
1866 } | 1868 } |
1867 | 1869 |
1868 @override | 1870 @override |
1869 ConstantValue getFieldConstantValue(ir.Field field) { | 1871 ConstantValue getFieldConstantValue(ir.Field field) { |
1870 throw new UnsupportedError("JsKernelToElementMap.getFieldConstantValue"); | 1872 throw new UnsupportedError("JsKernelToElementMap.getFieldConstantValue"); |
1871 } | 1873 } |
1872 } | 1874 } |
OLD | NEW |