OLD | NEW |
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 library dart2js.universe.world_impact; | 5 library dart2js.universe.world_impact; |
6 | 6 |
7 import '../dart_types.dart' show | 7 import '../dart_types.dart' show |
8 DartType, | 8 DartType, |
9 InterfaceType; | 9 InterfaceType; |
10 import '../elements/elements.dart' show | 10 import '../elements/elements.dart' show |
11 Element, | 11 Element, |
12 LocalFunctionElement, | 12 LocalFunctionElement, |
13 MethodElement; | 13 MethodElement; |
14 import '../util/util.dart' show | 14 import '../util/util.dart' show |
15 Setlet; | 15 Setlet; |
16 | 16 |
17 import 'universe.dart' show | |
18 UniverseSelector; | |
19 import 'use.dart' show | 17 import 'use.dart' show |
| 18 DynamicUse, |
20 StaticUse; | 19 StaticUse; |
21 | 20 |
22 class WorldImpact { | 21 class WorldImpact { |
23 const WorldImpact(); | 22 const WorldImpact(); |
24 | 23 |
25 Iterable<UniverseSelector> get dynamicUses => | 24 Iterable<DynamicUse> get dynamicUses => |
26 const <UniverseSelector>[]; | 25 const <DynamicUse>[]; |
27 | 26 |
28 Iterable<StaticUse> get staticUses => const <StaticUse>[]; | 27 Iterable<StaticUse> get staticUses => const <StaticUse>[]; |
29 | 28 |
30 // TODO(johnniwinther): Replace this by called constructors with type | 29 // TODO(johnniwinther): Replace this by called constructors with type |
31 // arguments. | 30 // arguments. |
32 Iterable<InterfaceType> get instantiatedTypes => const <InterfaceType>[]; | 31 Iterable<InterfaceType> get instantiatedTypes => const <InterfaceType>[]; |
33 | 32 |
34 // TODO(johnniwinther): Collect checked types for checked mode separately to | 33 // TODO(johnniwinther): Collect checked types for checked mode separately to |
35 // support serialization. | 34 // support serialization. |
36 Iterable<DartType> get isChecks => const <DartType>[]; | 35 Iterable<DartType> get isChecks => const <DartType>[]; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 add('as-casts', worldImpact.asCasts); | 68 add('as-casts', worldImpact.asCasts); |
70 add('on-catch-types', worldImpact.onCatchTypes); | 69 add('on-catch-types', worldImpact.onCatchTypes); |
71 add('closures', worldImpact.closures); | 70 add('closures', worldImpact.closures); |
72 add('type literals', worldImpact.typeLiterals); | 71 add('type literals', worldImpact.typeLiterals); |
73 } | 72 } |
74 } | 73 } |
75 | 74 |
76 class WorldImpactBuilder { | 75 class WorldImpactBuilder { |
77 // TODO(johnniwinther): Do we benefit from lazy initialization of the | 76 // TODO(johnniwinther): Do we benefit from lazy initialization of the |
78 // [Setlet]s? | 77 // [Setlet]s? |
79 Setlet<UniverseSelector> _dynamicUses; | 78 Setlet<DynamicUse> _dynamicUses; |
80 Setlet<InterfaceType> _instantiatedTypes; | 79 Setlet<InterfaceType> _instantiatedTypes; |
81 Setlet<StaticUse> _staticUses; | 80 Setlet<StaticUse> _staticUses; |
82 Setlet<DartType> _isChecks; | 81 Setlet<DartType> _isChecks; |
83 Setlet<DartType> _asCasts; | 82 Setlet<DartType> _asCasts; |
84 Setlet<DartType> _checkedModeChecks; | 83 Setlet<DartType> _checkedModeChecks; |
85 Setlet<DartType> _onCatchTypes; | 84 Setlet<DartType> _onCatchTypes; |
86 Setlet<LocalFunctionElement> _closures; | 85 Setlet<LocalFunctionElement> _closures; |
87 Setlet<DartType> _typeLiterals; | 86 Setlet<DartType> _typeLiterals; |
88 | 87 |
89 void registerDynamicUse(UniverseSelector dynamicUse) { | 88 void registerDynamicUse(DynamicUse dynamicUse) { |
90 assert(dynamicUse != null); | 89 assert(dynamicUse != null); |
91 if (_dynamicUses == null) { | 90 if (_dynamicUses == null) { |
92 _dynamicUses = new Setlet<UniverseSelector>(); | 91 _dynamicUses = new Setlet<DynamicUse>(); |
93 } | 92 } |
94 _dynamicUses.add(dynamicUse); | 93 _dynamicUses.add(dynamicUse); |
95 } | 94 } |
96 | 95 |
97 Iterable<UniverseSelector> get dynamicUses { | 96 Iterable<DynamicUse> get dynamicUses { |
98 return _dynamicUses != null | 97 return _dynamicUses != null |
99 ? _dynamicUses : const <UniverseSelector>[]; | 98 ? _dynamicUses : const <DynamicUse>[]; |
100 } | 99 } |
101 | 100 |
102 void registerInstantiatedType(InterfaceType type) { | 101 void registerInstantiatedType(InterfaceType type) { |
103 assert(type != null); | 102 assert(type != null); |
104 if (_instantiatedTypes == null) { | 103 if (_instantiatedTypes == null) { |
105 _instantiatedTypes = new Setlet<InterfaceType>(); | 104 _instantiatedTypes = new Setlet<InterfaceType>(); |
106 } | 105 } |
107 _instantiatedTypes.add(type); | 106 _instantiatedTypes.add(type); |
108 } | 107 } |
109 | 108 |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 } | 199 } |
201 } | 200 } |
202 | 201 |
203 /// Mutable implementation of [WorldImpact] used to transform | 202 /// Mutable implementation of [WorldImpact] used to transform |
204 /// [ResolutionImpact] or [CodegenImpact] to [WorldImpact]. | 203 /// [ResolutionImpact] or [CodegenImpact] to [WorldImpact]. |
205 class TransformedWorldImpact implements WorldImpact { | 204 class TransformedWorldImpact implements WorldImpact { |
206 final WorldImpact worldImpact; | 205 final WorldImpact worldImpact; |
207 | 206 |
208 Setlet<StaticUse> _staticUses; | 207 Setlet<StaticUse> _staticUses; |
209 Setlet<InterfaceType> _instantiatedTypes; | 208 Setlet<InterfaceType> _instantiatedTypes; |
210 Setlet<UniverseSelector> _dynamicUses; | 209 Setlet<DynamicUse> _dynamicUses; |
211 | 210 |
212 TransformedWorldImpact(this.worldImpact); | 211 TransformedWorldImpact(this.worldImpact); |
213 | 212 |
214 @override | 213 @override |
215 Iterable<DartType> get asCasts => worldImpact.asCasts; | 214 Iterable<DartType> get asCasts => worldImpact.asCasts; |
216 | 215 |
217 @override | 216 @override |
218 Iterable<DartType> get checkedModeChecks => worldImpact.checkedModeChecks; | 217 Iterable<DartType> get checkedModeChecks => worldImpact.checkedModeChecks; |
219 | 218 |
220 @override | 219 @override |
221 Iterable<UniverseSelector> get dynamicUses { | 220 Iterable<DynamicUse> get dynamicUses { |
222 return _dynamicUses != null | 221 return _dynamicUses != null |
223 ? _dynamicUses : worldImpact.dynamicUses; | 222 ? _dynamicUses : worldImpact.dynamicUses; |
224 } | 223 } |
225 | 224 |
226 @override | 225 @override |
227 Iterable<DartType> get isChecks => worldImpact.isChecks; | 226 Iterable<DartType> get isChecks => worldImpact.isChecks; |
228 | 227 |
229 @override | 228 @override |
230 Iterable<DartType> get onCatchTypes => worldImpact.onCatchTypes; | 229 Iterable<DartType> get onCatchTypes => worldImpact.onCatchTypes; |
231 | 230 |
232 _unsupported(String message) => throw new UnsupportedError(message); | 231 _unsupported(String message) => throw new UnsupportedError(message); |
233 | 232 |
234 void registerDynamicUse(UniverseSelector selector) { | 233 void registerDynamicUse(DynamicUse dynamicUse) { |
235 if (_dynamicUses == null) { | 234 if (_dynamicUses == null) { |
236 _dynamicUses = new Setlet<UniverseSelector>(); | 235 _dynamicUses = new Setlet<DynamicUse>(); |
237 _dynamicUses.addAll(worldImpact.dynamicUses); | 236 _dynamicUses.addAll(worldImpact.dynamicUses); |
238 } | 237 } |
239 _dynamicUses.add(selector); | 238 _dynamicUses.add(dynamicUse); |
240 } | 239 } |
241 | 240 |
242 void registerInstantiatedType(InterfaceType type) { | 241 void registerInstantiatedType(InterfaceType type) { |
243 if (_instantiatedTypes == null) { | 242 if (_instantiatedTypes == null) { |
244 _instantiatedTypes = new Setlet<InterfaceType>(); | 243 _instantiatedTypes = new Setlet<InterfaceType>(); |
245 _instantiatedTypes.addAll(worldImpact.instantiatedTypes); | 244 _instantiatedTypes.addAll(worldImpact.instantiatedTypes); |
246 } | 245 } |
247 _instantiatedTypes.add(type); | 246 _instantiatedTypes.add(type); |
248 } | 247 } |
249 | 248 |
(...skipping 24 matching lines...) Expand all Loading... |
274 @override | 273 @override |
275 Iterable<LocalFunctionElement> get closures => worldImpact.closures; | 274 Iterable<LocalFunctionElement> get closures => worldImpact.closures; |
276 | 275 |
277 String toString() { | 276 String toString() { |
278 StringBuffer sb = new StringBuffer(); | 277 StringBuffer sb = new StringBuffer(); |
279 sb.write('TransformedWorldImpact($worldImpact)'); | 278 sb.write('TransformedWorldImpact($worldImpact)'); |
280 WorldImpact.printOn(sb, this); | 279 WorldImpact.printOn(sb, this); |
281 return sb.toString(); | 280 return sb.toString(); |
282 } | 281 } |
283 } | 282 } |
OLD | NEW |