Index: pkg/compiler/lib/src/kernel/element_map_impl.dart |
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart |
index fd3010471b0bb6a623bd7b6ab3fc6d7691dc1297..daeb574c9fe6c193671de47ede197d9edd1576cf 100644 |
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart |
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart |
@@ -84,6 +84,10 @@ abstract class KernelToElementMapBase extends KernelToElementMapBaseMixin { |
/// used for fast lookup into library classes and members. |
List<LibraryEnv> _libraryEnvs = <LibraryEnv>[]; |
+ /// List of library data by `IndexedLibrary.libraryIndex`. This is used for |
+ /// fast lookup into library properties. |
+ List<LibraryData> _libraryData = <LibraryData>[]; |
+ |
/// List of class environments by `IndexedClass.classIndex`. This is used for |
/// fast lookup into class members. |
List<ClassEnv> _classEnvs = <ClassEnv>[]; |
@@ -608,6 +612,7 @@ abstract class ElementCreatorMixin { |
ProgramEnv get _env; |
List<LibraryEntity> get _libraryList; |
List<LibraryEnv> get _libraryEnvs; |
+ List<LibraryData> get _libraryData; |
List<ClassEntity> get _classList; |
List<ClassEnv> get _classEnvs; |
List<ClassData> get _classData; |
@@ -653,6 +658,7 @@ abstract class ElementCreatorMixin { |
LibraryEntity library = |
createLibrary(_libraryMap.length, name, canonicalUri); |
_libraryList.add(library); |
+ _libraryData.add(new LibraryData(node)); |
return library; |
}); |
} |
@@ -1284,7 +1290,27 @@ class KernelElementEnvironment implements ElementEnvironment { |
} |
@override |
- Iterable<ConstantValue> getMemberMetadata(covariant IndexedMember member) { |
+ Iterable<ConstantValue> getLibraryMetadata(covariant IndexedLibrary library) { |
+ LibraryData libraryData = elementMap._libraryData[library.libraryIndex]; |
+ return libraryData.getMetadata(elementMap); |
+ } |
+ |
+ @override |
+ Iterable<ConstantValue> getClassMetadata(covariant IndexedClass cls) { |
+ ClassData classData = elementMap._classData[cls.classIndex]; |
+ return classData.getMetadata(elementMap); |
+ } |
+ |
+ @override |
+ Iterable<ConstantValue> getTypedefMetadata(TypedefEntity typedef) { |
+ // TODO(redemption): Support this. |
+ throw new UnsupportedError('ElementEnvironment.getTypedefMetadata'); |
+ } |
+ |
+ @override |
+ Iterable<ConstantValue> getMemberMetadata(covariant IndexedMember member, |
+ {bool includeParameterMetadata: false}) { |
+ // TODO(redemption): Support includeParameterMetadata. |
MemberData memberData = elementMap._memberData[member.memberIndex]; |
return memberData.getMetadata(elementMap); |
} |
@@ -1790,10 +1816,12 @@ class JsKernelToElementMap extends KernelToElementMapBase |
libraryIndex < _elementMap._libraryEnvs.length; |
libraryIndex++) { |
LibraryEnv env = _elementMap._libraryEnvs[libraryIndex]; |
+ LibraryData data = _elementMap._libraryData[libraryIndex]; |
LibraryEntity oldLibrary = _elementMap._libraryList[libraryIndex]; |
LibraryEntity newLibrary = convertLibrary(oldLibrary); |
_libraryMap[env.library] = newLibrary; |
_libraryList.add(newLibrary); |
+ _libraryData.add(data.copy()); |
_libraryEnvs.add(env); |
} |
for (int classIndex = 0; |