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

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

Issue 2150493002: Serialize prefix members. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 5 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 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 /// before query. 229 /// before query.
230 class ListedContainer { 230 class ListedContainer {
231 final Map<String, Element> _lookupMap = <String, Element>{}; 231 final Map<String, Element> _lookupMap = <String, Element>{};
232 232
233 ListedContainer(List<Element> elements) { 233 ListedContainer(List<Element> elements) {
234 Set<String> accessorNames = new Set<String>(); 234 Set<String> accessorNames = new Set<String>();
235 Map<String, Element> getters = <String, Element>{}; 235 Map<String, Element> getters = <String, Element>{};
236 Map<String, Element> setters = <String, Element>{}; 236 Map<String, Element> setters = <String, Element>{};
237 for (Element element in elements) { 237 for (Element element in elements) {
238 String name = element.name; 238 String name = element.name;
239 if (element.isGetter) { 239 if (element.isDeferredLoaderGetter) {
240 // Store directly.
241 // TODO(johnniwinther): Should modelx be normalized to put `loadLibrary`
242 // in an [AbstractFieldElement] instead?
243 _lookupMap[name] = element;
244 } else if (element.isGetter) {
240 accessorNames.add(name); 245 accessorNames.add(name);
241 getters[name] = element; 246 getters[name] = element;
242 // Inserting [element] here to ensure insert order of [name]. 247 // Inserting [element] here to ensure insert order of [name].
243 _lookupMap[name] = element; 248 _lookupMap[name] = element;
244 } else if (element.isSetter) { 249 } else if (element.isSetter) {
245 accessorNames.add(name); 250 accessorNames.add(name);
246 setters[name] = element; 251 setters[name] = element;
247 // Inserting [element] here to ensure insert order of [name]. 252 // Inserting [element] here to ensure insert order of [name].
248 _lookupMap[name] = element; 253 _lookupMap[name] = element;
249 } else { 254 } else {
(...skipping 2023 matching lines...) Expand 10 before | Expand all | Expand 10 after
2273 2278
2274 String toString() => 'Z$kind($uri)'; 2279 String toString() => 'Z$kind($uri)';
2275 } 2280 }
2276 2281
2277 class PrefixElementZ extends DeserializedElementZ 2282 class PrefixElementZ extends DeserializedElementZ
2278 with LibraryMemberMixin 2283 with LibraryMemberMixin
2279 implements PrefixElement { 2284 implements PrefixElement {
2280 bool _isDeferred; 2285 bool _isDeferred;
2281 ImportElement _deferredImport; 2286 ImportElement _deferredImport;
2282 GetterElement _loadLibrary; 2287 GetterElement _loadLibrary;
2288 ListedContainer _members;
2283 2289
2284 PrefixElementZ(ObjectDecoder decoder) : super(decoder); 2290 PrefixElementZ(ObjectDecoder decoder) : super(decoder);
2285 2291
2286 @override 2292 @override
2287 accept(ElementVisitor visitor, arg) => visitor.visitPrefixElement(this, arg); 2293 accept(ElementVisitor visitor, arg) => visitor.visitPrefixElement(this, arg);
2288 2294
2289 @override 2295 @override
2290 bool get isTopLevel => false; 2296 bool get isTopLevel => false;
2291 2297
2292 void _ensureDeferred() { 2298 void _ensureDeferred() {
(...skipping 19 matching lines...) Expand all
2312 } 2318 }
2313 2319
2314 @override 2320 @override
2315 GetterElement get loadLibrary { 2321 GetterElement get loadLibrary {
2316 return _loadLibrary; 2322 return _loadLibrary;
2317 } 2323 }
2318 2324
2319 @override 2325 @override
2320 ElementKind get kind => ElementKind.PREFIX; 2326 ElementKind get kind => ElementKind.PREFIX;
2321 2327
2328 void _ensureMembers() {
2329 if (_members == null) {
2330 _members = new ListedContainer(
2331 _decoder.getElements(Key.MEMBERS, isOptional: true));
2332 }
2333 }
2334
2322 @override 2335 @override
2323 Element lookupLocalMember(String memberName) { 2336 Element lookupLocalMember(String memberName) {
2324 return _unsupported('lookupLocalMember'); 2337 _ensureMembers();
2338 return _members.lookup(memberName);
2339 }
2340
2341 @override
2342 void forEachLocalMember(void f(Element member)) {
2343 _ensureMembers();
2344 _members.forEach(f);
2325 } 2345 }
2326 } 2346 }
2327 2347
2328 class MetadataAnnotationZ implements MetadataAnnotation { 2348 class MetadataAnnotationZ implements MetadataAnnotation {
2329 final Element annotatedElement; 2349 final Element annotatedElement;
2330 final SourceSpan sourcePosition; 2350 final SourceSpan sourcePosition;
2331 final ConstantExpression constant; 2351 final ConstantExpression constant;
2332 2352
2333 MetadataAnnotationZ( 2353 MetadataAnnotationZ(
2334 this.annotatedElement, this.sourcePosition, this.constant); 2354 this.annotatedElement, this.sourcePosition, this.constant);
2335 2355
2336 @override 2356 @override
2337 MetadataAnnotation ensureResolved(Resolution resolution) { 2357 MetadataAnnotation ensureResolved(Resolution resolution) {
2338 // Do nothing. 2358 // Do nothing.
2339 } 2359 }
2340 2360
2341 @override 2361 @override
2342 Node get node => throw new UnsupportedError('${this}.node'); 2362 Node get node => throw new UnsupportedError('${this}.node');
2343 2363
2344 @override 2364 @override
2345 bool get hasNode => false; 2365 bool get hasNode => false;
2346 2366
2347 String toString() => 'MetadataAnnotationZ(${constant.toDartText()})'; 2367 String toString() => 'MetadataAnnotationZ(${constant.toDartText()})';
2348 } 2368 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698