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

Side by Side Diff: pkg/compiler/lib/src/resolution/registry.dart

Issue 1394923003: Use WorldImpact for element dependencies in deferred_load (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 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) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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.resolution.registry; 5 library dart2js.resolution.registry;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../common/backend_api.dart' show 8 import '../common/backend_api.dart' show
9 Backend, 9 Backend,
10 ForeignResolver; 10 ForeignResolver;
11 import '../common/resolution.dart' show 11 import '../common/resolution.dart' show
12 Feature, 12 Feature,
13 ListLiteralUse, 13 ListLiteralUse,
14 MapLiteralUse, 14 MapLiteralUse,
15 ResolutionWorldImpact; 15 ResolutionImpact;
16 import '../common/registry.dart' show 16 import '../common/registry.dart' show
17 Registry; 17 Registry;
18 import '../compiler.dart' show 18 import '../compiler.dart' show
19 Compiler; 19 Compiler;
20 import '../constants/expressions.dart'; 20 import '../constants/expressions.dart';
21 import '../dart_types.dart'; 21 import '../dart_types.dart';
22 import '../enqueue.dart' show 22 import '../enqueue.dart' show
23 ResolutionEnqueuer; 23 ResolutionEnqueuer;
24 import '../elements/elements.dart'; 24 import '../elements/elements.dart';
25 import '../tree/tree.dart'; 25 import '../tree/tree.dart';
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 92
93 @override 93 @override
94 void registerStaticInvocation(Element element) { 94 void registerStaticInvocation(Element element) {
95 registerDependency(element); 95 registerDependency(element);
96 world.registerStaticUse(element); 96 world.registerStaticUse(element);
97 } 97 }
98 98
99 String toString() => 'EagerRegistry for ${mapping.analyzedElement}'; 99 String toString() => 'EagerRegistry for ${mapping.analyzedElement}';
100 } 100 }
101 101
102 class _ResolutionWorldImpact implements ResolutionWorldImpact { 102 class _ResolutionWorldImpact implements ResolutionImpact {
103 final Registry registry; 103 final Registry registry;
104 // TODO(johnniwinther): Do we benefit from lazy initialization of the 104 // TODO(johnniwinther): Do we benefit from lazy initialization of the
105 // [Setlet]s? 105 // [Setlet]s?
106 Setlet<UniverseSelector> _dynamicInvocations; 106 Setlet<UniverseSelector> _dynamicInvocations;
107 Setlet<UniverseSelector> _dynamicGetters; 107 Setlet<UniverseSelector> _dynamicGetters;
108 Setlet<UniverseSelector> _dynamicSetters; 108 Setlet<UniverseSelector> _dynamicSetters;
109 Setlet<InterfaceType> _instantiatedTypes; 109 Setlet<InterfaceType> _instantiatedTypes;
110 Setlet<Element> _staticUses; 110 Setlet<Element> _staticUses;
111 Setlet<DartType> _isChecks; 111 Setlet<DartType> _isChecks;
112 Setlet<DartType> _asCasts; 112 Setlet<DartType> _asCasts;
113 Setlet<DartType> _checkedModeChecks; 113 Setlet<DartType> _checkedModeChecks;
114 Setlet<MethodElement> _closurizedFunctions; 114 Setlet<MethodElement> _closurizedFunctions;
115 Setlet<LocalFunctionElement> _closures; 115 Setlet<LocalFunctionElement> _closures;
116 Setlet<Feature> _features; 116 Setlet<Feature> _features;
117 // TODO(johnniwinther): This seems to be a union of other sets. 117 // TODO(johnniwinther): This seems to be a union of other sets.
118 Setlet<DartType> _requiredTypes; 118 Setlet<DartType> _requiredTypes;
119 Setlet<MapLiteralUse> _mapLiterals; 119 Setlet<MapLiteralUse> _mapLiterals;
120 Setlet<ListLiteralUse> _listLiterals; 120 Setlet<ListLiteralUse> _listLiterals;
121 Setlet<DartType> _typeLiterals; 121 Setlet<DartType> _typeLiterals;
122 Setlet<String> _constSymbolNames; 122 Setlet<String> _constSymbolNames;
123 123
124 _ResolutionWorldImpact(Compiler compiler, TreeElementMapping mapping) 124 _ResolutionWorldImpact(Compiler compiler, TreeElementMapping mapping)
125 : this.registry = new EagerRegistry(compiler, mapping); 125 : this.registry = new EagerRegistry(compiler, mapping);
126 126
127 void registerDependency(Element element) { 127 void registerDependency(Element element) {
128 assert(element != null);
128 registry.registerDependency(element); 129 registry.registerDependency(element);
129 } 130 }
130 131
131 void registerDynamicGetter(UniverseSelector selector) { 132 void registerDynamicGetter(UniverseSelector selector) {
133 assert(selector != null);
132 if (_dynamicGetters == null) { 134 if (_dynamicGetters == null) {
133 _dynamicGetters = new Setlet<UniverseSelector>(); 135 _dynamicGetters = new Setlet<UniverseSelector>();
134 } 136 }
135 _dynamicGetters.add(selector); 137 _dynamicGetters.add(selector);
136 } 138 }
137 139
138 @override 140 @override
139 Iterable<UniverseSelector> get dynamicGetters { 141 Iterable<UniverseSelector> get dynamicGetters {
140 return _dynamicGetters != null 142 return _dynamicGetters != null
141 ? _dynamicGetters : const <UniverseSelector>[]; 143 ? _dynamicGetters : const <UniverseSelector>[];
142 } 144 }
143 145
144 void registerDynamicInvocation(UniverseSelector selector) { 146 void registerDynamicInvocation(UniverseSelector selector) {
147 assert(selector != null);
145 if (_dynamicInvocations == null) { 148 if (_dynamicInvocations == null) {
146 _dynamicInvocations = new Setlet<UniverseSelector>(); 149 _dynamicInvocations = new Setlet<UniverseSelector>();
147 } 150 }
148 _dynamicInvocations.add(selector); 151 _dynamicInvocations.add(selector);
149 } 152 }
150 153
151 @override 154 @override
152 Iterable<UniverseSelector> get dynamicInvocations { 155 Iterable<UniverseSelector> get dynamicInvocations {
153 return _dynamicInvocations != null 156 return _dynamicInvocations != null
154 ? _dynamicInvocations : const <UniverseSelector>[]; 157 ? _dynamicInvocations : const <UniverseSelector>[];
155 } 158 }
156 159
157 void registerDynamicSetter(UniverseSelector selector) { 160 void registerDynamicSetter(UniverseSelector selector) {
161 assert(selector != null);
158 if (_dynamicSetters == null) { 162 if (_dynamicSetters == null) {
159 _dynamicSetters = new Setlet<UniverseSelector>(); 163 _dynamicSetters = new Setlet<UniverseSelector>();
160 } 164 }
161 _dynamicSetters.add(selector); 165 _dynamicSetters.add(selector);
162 } 166 }
163 167
164 @override 168 @override
165 Iterable<UniverseSelector> get dynamicSetters { 169 Iterable<UniverseSelector> get dynamicSetters {
166 return _dynamicSetters != null 170 return _dynamicSetters != null
167 ? _dynamicSetters : const <UniverseSelector>[]; 171 ? _dynamicSetters : const <UniverseSelector>[];
168 } 172 }
169 173
170 void registerInstantiatedType(InterfaceType type) { 174 void registerInstantiatedType(InterfaceType type) {
175 assert(type != null);
171 if (_instantiatedTypes == null) { 176 if (_instantiatedTypes == null) {
172 _instantiatedTypes = new Setlet<InterfaceType>(); 177 _instantiatedTypes = new Setlet<InterfaceType>();
173 } 178 }
174 _instantiatedTypes.add(type); 179 _instantiatedTypes.add(type);
175 } 180 }
176 181
177 @override 182 @override
178 Iterable<InterfaceType> get instantiatedTypes { 183 Iterable<InterfaceType> get instantiatedTypes {
179 return _instantiatedTypes != null 184 return _instantiatedTypes != null
180 ? _instantiatedTypes : const <InterfaceType>[]; 185 ? _instantiatedTypes : const <InterfaceType>[];
181 } 186 }
182 187
183 void registerTypeLiteral(DartType type) { 188 void registerTypeLiteral(DartType type) {
189 assert(type != null);
184 if (_typeLiterals == null) { 190 if (_typeLiterals == null) {
185 _typeLiterals = new Setlet<DartType>(); 191 _typeLiterals = new Setlet<DartType>();
186 } 192 }
187 _typeLiterals.add(type); 193 _typeLiterals.add(type);
188 } 194 }
189 195
190 @override 196 @override
191 Iterable<DartType> get typeLiterals { 197 Iterable<DartType> get typeLiterals {
192 return _typeLiterals != null 198 return _typeLiterals != null
193 ? _typeLiterals : const <DartType>[]; 199 ? _typeLiterals : const <DartType>[];
194 } 200 }
195 201
196 void registerRequiredType(DartType type) { 202 void registerRequiredType(DartType type) {
203 assert(type != null);
197 if (_requiredTypes == null) { 204 if (_requiredTypes == null) {
198 _requiredTypes = new Setlet<DartType>(); 205 _requiredTypes = new Setlet<DartType>();
199 } 206 }
200 _requiredTypes.add(type); 207 _requiredTypes.add(type);
201 } 208 }
202 209
203 @override 210 @override
204 Iterable<DartType> get requiredTypes { 211 Iterable<DartType> get requiredTypes {
205 return _requiredTypes != null 212 return _requiredTypes != null
206 ? _requiredTypes : const <DartType>[]; 213 ? _requiredTypes : const <DartType>[];
207 } 214 }
208 215
209 void registerMapLiteral(MapLiteralUse mapLiteralUse) { 216 void registerMapLiteral(MapLiteralUse mapLiteralUse) {
217 assert(mapLiteralUse != null);
210 if (_mapLiterals == null) { 218 if (_mapLiterals == null) {
211 _mapLiterals = new Setlet<MapLiteralUse>(); 219 _mapLiterals = new Setlet<MapLiteralUse>();
212 } 220 }
213 _mapLiterals.add(mapLiteralUse); 221 _mapLiterals.add(mapLiteralUse);
214 } 222 }
215 223
216 @override 224 @override
217 Iterable<MapLiteralUse> get mapLiterals { 225 Iterable<MapLiteralUse> get mapLiterals {
218 return _mapLiterals != null 226 return _mapLiterals != null
219 ? _mapLiterals : const <MapLiteralUse>[]; 227 ? _mapLiterals : const <MapLiteralUse>[];
220 } 228 }
221 229
222 void registerListLiteral(ListLiteralUse listLiteralUse) { 230 void registerListLiteral(ListLiteralUse listLiteralUse) {
231 assert(listLiteralUse != null);
223 if (_listLiterals == null) { 232 if (_listLiterals == null) {
224 _listLiterals = new Setlet<ListLiteralUse>(); 233 _listLiterals = new Setlet<ListLiteralUse>();
225 } 234 }
226 _listLiterals.add(listLiteralUse); 235 _listLiterals.add(listLiteralUse);
227 } 236 }
228 237
229 @override 238 @override
230 Iterable<ListLiteralUse> get listLiterals { 239 Iterable<ListLiteralUse> get listLiterals {
231 return _listLiterals != null 240 return _listLiterals != null
232 ? _listLiterals : const <ListLiteralUse>[]; 241 ? _listLiterals : const <ListLiteralUse>[];
233 } 242 }
234 243
235 void registerStaticUse(Element element) { 244 void registerStaticUse(Element element) {
245 assert(element != null);
236 if (_staticUses == null) { 246 if (_staticUses == null) {
237 _staticUses = new Setlet<Element>(); 247 _staticUses = new Setlet<Element>();
238 } 248 }
239 _staticUses.add(element); 249 _staticUses.add(element);
240 } 250 }
241 251
242 @override 252 @override
243 Iterable<Element> get staticUses { 253 Iterable<Element> get staticUses {
244 return _staticUses != null ? _staticUses : const <Element>[]; 254 return _staticUses != null ? _staticUses : const <Element>[];
245 } 255 }
246 256
247 void registerIsCheck(DartType type) { 257 void registerIsCheck(DartType type) {
258 assert(type != null);
248 if (_isChecks == null) { 259 if (_isChecks == null) {
249 _isChecks = new Setlet<DartType>(); 260 _isChecks = new Setlet<DartType>();
250 } 261 }
251 _isChecks.add(type); 262 _isChecks.add(type);
252 } 263 }
253 264
254 @override 265 @override
255 Iterable<DartType> get isChecks { 266 Iterable<DartType> get isChecks {
256 return _isChecks != null 267 return _isChecks != null
257 ? _isChecks : const <DartType>[]; 268 ? _isChecks : const <DartType>[];
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 @override 791 @override
781 void registerInstantiatedType(InterfaceType type) { 792 void registerInstantiatedType(InterfaceType type) {
782 registry.registerInstantiatedType(type); 793 registry.registerInstantiatedType(type);
783 } 794 }
784 795
785 @override 796 @override
786 DartType resolveTypeFromString(Node node, String typeName) { 797 DartType resolveTypeFromString(Node node, String typeName) {
787 return visitor.resolveTypeFromString(node, typeName); 798 return visitor.resolveTypeFromString(node, typeName);
788 } 799 }
789 } 800 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698