Index: pkg/compiler/lib/src/serialization/modelz.dart |
diff --git a/pkg/compiler/lib/src/serialization/modelz.dart b/pkg/compiler/lib/src/serialization/modelz.dart |
index 929528553ddb4341dd4e86a0c95bdce8a9b4a50f..a067b9e6ebf65dc3c3440a5b576370bc6ed731ba 100644 |
--- a/pkg/compiler/lib/src/serialization/modelz.dart |
+++ b/pkg/compiler/lib/src/serialization/modelz.dart |
@@ -236,7 +236,12 @@ class ListedContainer { |
Map<String, Element> setters = <String, Element>{}; |
for (Element element in elements) { |
String name = element.name; |
- if (element.isGetter) { |
+ if (element.isDeferredLoaderGetter) { |
+ // Store directly. |
+ // TODO(johnniwinther): Should modelx be normalized to put `loadLibrary` |
+ // in an [AbstractFieldElement] instead? |
+ _lookupMap[name] = element; |
+ } else if (element.isGetter) { |
accessorNames.add(name); |
getters[name] = element; |
// Inserting [element] here to ensure insert order of [name]. |
@@ -2280,6 +2285,7 @@ class PrefixElementZ extends DeserializedElementZ |
bool _isDeferred; |
ImportElement _deferredImport; |
GetterElement _loadLibrary; |
+ ListedContainer _members; |
PrefixElementZ(ObjectDecoder decoder) : super(decoder); |
@@ -2319,9 +2325,23 @@ class PrefixElementZ extends DeserializedElementZ |
@override |
ElementKind get kind => ElementKind.PREFIX; |
+ void _ensureMembers() { |
+ if (_members == null) { |
+ _members = new ListedContainer( |
+ _decoder.getElements(Key.MEMBERS, isOptional: true)); |
+ } |
+ } |
+ |
@override |
Element lookupLocalMember(String memberName) { |
- return _unsupported('lookupLocalMember'); |
+ _ensureMembers(); |
+ return _members.lookup(memberName); |
+ } |
+ |
+ @override |
+ void forEachLocalMember(void f(Element member)) { |
+ _ensureMembers(); |
+ _members.forEach(f); |
} |
} |