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

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

Issue 1901683002: Support deserialization of ResolutionImpact for members of unnamed mixin applications (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 8 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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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.serialization.impact; 5 library dart2js.serialization.impact;
6 6
7 import '../common.dart';
7 import '../common/resolution.dart'; 8 import '../common/resolution.dart';
8 import '../constants/expressions.dart'; 9 import '../constants/expressions.dart';
9 import '../dart_types.dart'; 10 import '../dart_types.dart';
10 import '../elements/elements.dart'; 11 import '../elements/elements.dart';
11 import '../universe/selector.dart'; 12 import '../universe/selector.dart';
12 import '../universe/use.dart'; 13 import '../universe/use.dart';
13 import '../universe/world_impact.dart'; 14 import '../universe/world_impact.dart';
14 import '../util/enumset.dart'; 15 import '../util/enumset.dart';
15 import 'keys.dart'; 16 import 'keys.dart';
16 import 'serialization.dart'; 17 import 'serialization.dart';
17 import 'serialization_util.dart'; 18 import 'serialization_util.dart';
18 19
19 /// Visitor that serializes a [ResolutionImpact] object using an 20 /// Visitor that serializes a [ResolutionImpact] object using an
20 /// [ObjectEncoder]. 21 /// [ObjectEncoder].
21 class ImpactSerializer implements WorldImpactVisitor { 22 class ImpactSerializer implements WorldImpactVisitor {
23 final Element element;
22 final ObjectEncoder objectEncoder; 24 final ObjectEncoder objectEncoder;
23 final ListEncoder staticUses; 25 final ListEncoder staticUses;
24 final ListEncoder dynamicUses; 26 final ListEncoder dynamicUses;
25 final ListEncoder typeUses; 27 final ListEncoder typeUses;
26 28
27 ImpactSerializer(ObjectEncoder objectEncoder) 29 ImpactSerializer(this.element, ObjectEncoder objectEncoder)
28 : this.objectEncoder = objectEncoder, 30 : this.objectEncoder = objectEncoder,
29 staticUses = objectEncoder.createList(Key.STATIC_USES), 31 staticUses = objectEncoder.createList(Key.STATIC_USES),
30 dynamicUses = objectEncoder.createList(Key.DYNAMIC_USES), 32 dynamicUses = objectEncoder.createList(Key.DYNAMIC_USES),
31 typeUses = objectEncoder.createList(Key.TYPE_USES); 33 typeUses = objectEncoder.createList(Key.TYPE_USES);
32 34
33 void serialize(ResolutionImpact resolutionImpact) { 35 void serialize(ResolutionImpact resolutionImpact) {
34 resolutionImpact.apply(this); 36 resolutionImpact.apply(this);
35 objectEncoder.setStrings(Key.SYMBOLS, resolutionImpact.constSymbolNames); 37 objectEncoder.setStrings(Key.SYMBOLS, resolutionImpact.constSymbolNames);
36 objectEncoder.setConstants( 38 objectEncoder.setConstants(
37 Key.CONSTANTS, resolutionImpact.constantLiterals); 39 Key.CONSTANTS, resolutionImpact.constantLiterals);
(...skipping 19 matching lines...) Expand all
57 } 59 }
58 60
59 @override 61 @override
60 void visitDynamicUse(DynamicUse dynamicUse) { 62 void visitDynamicUse(DynamicUse dynamicUse) {
61 ObjectEncoder object = dynamicUses.createObject(); 63 ObjectEncoder object = dynamicUses.createObject();
62 serializeSelector(dynamicUse.selector, object); 64 serializeSelector(dynamicUse.selector, object);
63 } 65 }
64 66
65 @override 67 @override
66 void visitStaticUse(StaticUse staticUse) { 68 void visitStaticUse(StaticUse staticUse) {
67 if (staticUse.element.isGenerativeConstructor &&
68 staticUse.element.enclosingClass.isUnnamedMixinApplication) {
69 // TODO(johnniwinther): Handle static use of forwarding constructors.
70 return;
71 }
72 ObjectEncoder object = staticUses.createObject(); 69 ObjectEncoder object = staticUses.createObject();
73 object.setEnum(Key.KIND, staticUse.kind); 70 object.setEnum(Key.KIND, staticUse.kind);
74 object.setElement(Key.ELEMENT, staticUse.element); 71 serializeElementReference(
72 element, Key.ELEMENT, Key.NAME, object, staticUse.element);
75 } 73 }
76 74
77 @override 75 @override
78 void visitTypeUse(TypeUse typeUse) { 76 void visitTypeUse(TypeUse typeUse) {
79 ObjectEncoder object = typeUses.createObject(); 77 ObjectEncoder object = typeUses.createObject();
80 object.setEnum(Key.KIND, typeUse.kind); 78 object.setEnum(Key.KIND, typeUse.kind);
81 object.setType(Key.TYPE, typeUse.type); 79 object.setType(Key.TYPE, typeUse.type);
82 } 80 }
83 } 81 }
84 82
85 /// A deserialized [WorldImpact] object. 83 /// A deserialized [WorldImpact] object.
86 class DeserializedResolutionImpact extends WorldImpact 84 class DeserializedResolutionImpact extends WorldImpact
87 implements ResolutionImpact { 85 implements ResolutionImpact {
88 final Iterable<String> constSymbolNames; 86 final Iterable<String> constSymbolNames;
89 final Iterable<ConstantExpression> constantLiterals; 87 final Iterable<ConstantExpression> constantLiterals;
90 final Iterable<DynamicUse> dynamicUses; 88 final Iterable<DynamicUse> dynamicUses;
91 final EnumSet<Feature> _features; 89 final EnumSet<Feature> _features;
92 final Iterable<ListLiteralUse> listLiterals; 90 final Iterable<ListLiteralUse> listLiterals;
93 final Iterable<MapLiteralUse> mapLiterals; 91 final Iterable<MapLiteralUse> mapLiterals;
94 final Iterable<StaticUse> staticUses; 92 final Iterable<StaticUse> staticUses;
95 final Iterable<TypeUse> typeUses; 93 final Iterable<TypeUse> typeUses;
96 94
97 DeserializedResolutionImpact( 95 DeserializedResolutionImpact(
98 {this.constSymbolNames, 96 {this.constSymbolNames: const <String>[],
99 this.constantLiterals, 97 this.constantLiterals: const <ConstantExpression>[],
100 this.dynamicUses, 98 this.dynamicUses: const <DynamicUse>[],
101 EnumSet<Feature> features, 99 EnumSet<Feature> features,
102 this.listLiterals, 100 this.listLiterals: const <ListLiteralUse>[],
103 this.mapLiterals, 101 this.mapLiterals: const <MapLiteralUse>[],
104 this.staticUses, 102 this.staticUses: const <StaticUse>[],
105 this.typeUses}) 103 this.typeUses: const <TypeUse>[]})
106 : this._features = features; 104 : this._features = features;
107 105
108 Iterable<Feature> get features => _features.iterable(Feature.values); 106 Iterable<Feature> get features {
107 return _features != null
108 ? _features.iterable(Feature.values)
109 : const <Feature>[];
110 }
109 } 111 }
110 112
111 class ImpactDeserializer { 113 class ImpactDeserializer {
112 /// Deserializes a [WorldImpact] from [objectDecoder]. 114 /// Deserializes a [WorldImpact] from [objectDecoder].
113 static ResolutionImpact deserializeImpact(ObjectDecoder objectDecoder) { 115 static ResolutionImpact deserializeImpact(
116 Element element, ObjectDecoder objectDecoder) {
114 ListDecoder staticUseDecoder = objectDecoder.getList(Key.STATIC_USES); 117 ListDecoder staticUseDecoder = objectDecoder.getList(Key.STATIC_USES);
115 List<StaticUse> staticUses = <StaticUse>[]; 118 List<StaticUse> staticUses = <StaticUse>[];
116 for (int index = 0; index < staticUseDecoder.length; index++) { 119 for (int index = 0; index < staticUseDecoder.length; index++) {
117 ObjectDecoder object = staticUseDecoder.getObject(index); 120 ObjectDecoder object = staticUseDecoder.getObject(index);
118 StaticUseKind kind = object.getEnum(Key.KIND, StaticUseKind.values); 121 StaticUseKind kind = object.getEnum(Key.KIND, StaticUseKind.values);
119 Element element = object.getElement(Key.ELEMENT); 122 Element usedElement =
120 staticUses.add(new StaticUse.internal(element, kind)); 123 deserializeElementReference(element, Key.ELEMENT, Key.NAME, object);
124 staticUses.add(new StaticUse.internal(usedElement, kind));
121 } 125 }
122 126
123 ListDecoder dynamicUseDecoder = objectDecoder.getList(Key.DYNAMIC_USES); 127 ListDecoder dynamicUseDecoder = objectDecoder.getList(Key.DYNAMIC_USES);
124 List<DynamicUse> dynamicUses = <DynamicUse>[]; 128 List<DynamicUse> dynamicUses = <DynamicUse>[];
125 for (int index = 0; index < dynamicUseDecoder.length; index++) { 129 for (int index = 0; index < dynamicUseDecoder.length; index++) {
126 ObjectDecoder object = dynamicUseDecoder.getObject(index); 130 ObjectDecoder object = dynamicUseDecoder.getObject(index);
127 Selector selector = deserializeSelector(object); 131 Selector selector = deserializeSelector(object);
128 dynamicUses.add(new DynamicUse(selector, null)); 132 dynamicUses.add(new DynamicUse(selector, null));
129 } 133 }
130 134
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 constSymbolNames: constSymbolNames, 184 constSymbolNames: constSymbolNames,
181 constantLiterals: constantLiterals, 185 constantLiterals: constantLiterals,
182 dynamicUses: dynamicUses, 186 dynamicUses: dynamicUses,
183 features: features, 187 features: features,
184 listLiterals: listLiterals, 188 listLiterals: listLiterals,
185 mapLiterals: mapLiterals, 189 mapLiterals: mapLiterals,
186 staticUses: staticUses, 190 staticUses: staticUses,
187 typeUses: typeUses); 191 typeUses: typeUses);
188 } 192 }
189 } 193 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698