OLD | NEW |
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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.js_model.strategy; | 5 library dart2js.js_model.strategy; |
6 | 6 |
7 import '../closure.dart' show ClosureConversionTask; | 7 import '../closure.dart' show ClosureConversionTask; |
8 import '../common/tasks.dart'; | 8 import '../common/tasks.dart'; |
9 import '../common_elements.dart'; | 9 import '../common_elements.dart'; |
10 import '../compiler.dart'; | 10 import '../compiler.dart'; |
11 import '../elements/elements.dart' show TypedefElement; | 11 import '../elements/elements.dart' show TypedefElement; |
12 import '../elements/entities.dart'; | 12 import '../elements/entities.dart'; |
13 import '../enqueue.dart'; | 13 import '../enqueue.dart'; |
14 import '../io/source_information.dart'; | 14 import '../io/source_information.dart'; |
15 import '../js_emitter/sorter.dart'; | 15 import '../js_emitter/sorter.dart'; |
16 import '../js/js_source_mapping.dart'; | 16 import '../js/js_source_mapping.dart'; |
17 import '../js_backend/backend.dart'; | 17 import '../js_backend/backend.dart'; |
18 import '../js_backend/backend_usage.dart'; | 18 import '../js_backend/backend_usage.dart'; |
19 import '../js_backend/constant_system_javascript.dart'; | 19 import '../js_backend/constant_system_javascript.dart'; |
20 import '../js_backend/interceptor_data.dart'; | 20 import '../js_backend/interceptor_data.dart'; |
21 import '../js_backend/native_data.dart'; | 21 import '../js_backend/native_data.dart'; |
| 22 import '../js_backend/runtime_types.dart'; |
22 import '../kernel/element_map.dart'; | 23 import '../kernel/element_map.dart'; |
23 import '../kernel/element_map_impl.dart'; | 24 import '../kernel/element_map_impl.dart'; |
24 import '../kernel/kernel_backend_strategy.dart'; | 25 import '../kernel/kernel_backend_strategy.dart'; |
25 import '../kernel/kernel_strategy.dart'; | 26 import '../kernel/kernel_strategy.dart'; |
26 import '../ssa/ssa.dart'; | 27 import '../ssa/ssa.dart'; |
27 import '../universe/class_set.dart'; | 28 import '../universe/class_set.dart'; |
28 import '../universe/world_builder.dart'; | 29 import '../universe/world_builder.dart'; |
29 import '../util/emptyset.dart'; | 30 import '../util/emptyset.dart'; |
30 import '../world.dart'; | 31 import '../world.dart'; |
31 import 'closure.dart'; | 32 import 'closure.dart'; |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 <ClassEntity, Set<ClassEntity>>{}; | 136 <ClassEntity, Set<ClassEntity>>{}; |
136 closedWorld.typesImplementedBySubclasses | 137 closedWorld.typesImplementedBySubclasses |
137 .forEach((ClassEntity cls, Set<ClassEntity> uses) { | 138 .forEach((ClassEntity cls, Set<ClassEntity> uses) { |
138 typesImplementedBySubclasses[_map.toBackendClass(cls)] = | 139 typesImplementedBySubclasses[_map.toBackendClass(cls)] = |
139 uses.map(_map.toBackendClass).toSet(); | 140 uses.map(_map.toBackendClass).toSet(); |
140 }); | 141 }); |
141 | 142 |
142 Iterable<MemberEntity> assignedInstanceMembers = | 143 Iterable<MemberEntity> assignedInstanceMembers = |
143 closedWorld.assignedInstanceMembers.map(_map.toBackendMember).toList(); | 144 closedWorld.assignedInstanceMembers.map(_map.toBackendMember).toList(); |
144 | 145 |
| 146 Iterable<ClassEntity> liveNativeClasses = |
| 147 closedWorld.liveNativeClasses.map(_map.toBackendClass).toList(); |
| 148 |
| 149 RuntimeTypesNeed rtiNeed = |
| 150 new JsRuntimeTypesNeed(_map, closedWorld.rtiNeed); |
| 151 |
145 return new JsClosedWorld(_elementMap, | 152 return new JsClosedWorld(_elementMap, |
146 elementEnvironment: _elementEnvironment, | 153 elementEnvironment: _elementEnvironment, |
147 dartTypes: _elementMap.types, | 154 dartTypes: _elementMap.types, |
148 commonElements: _commonElements, | 155 commonElements: _commonElements, |
149 constantSystem: const JavaScriptConstantSystem(), | 156 constantSystem: const JavaScriptConstantSystem(), |
150 backendUsage: backendUsage, | 157 backendUsage: backendUsage, |
151 nativeData: nativeData, | 158 nativeData: nativeData, |
152 interceptorData: interceptorData, | 159 interceptorData: interceptorData, |
| 160 rtiNeed: rtiNeed, |
153 classHierarchyNodes: classHierarchyNodes, | 161 classHierarchyNodes: classHierarchyNodes, |
154 classSets: classSets, | 162 classSets: classSets, |
155 implementedClasses: implementedClasses, | 163 implementedClasses: implementedClasses, |
| 164 liveNativeClasses: liveNativeClasses, |
156 liveInstanceMembers: liveInstanceMembers, | 165 liveInstanceMembers: liveInstanceMembers, |
157 assignedInstanceMembers: assignedInstanceMembers, | 166 assignedInstanceMembers: assignedInstanceMembers, |
158 mixinUses: mixinUses, | 167 mixinUses: mixinUses, |
159 typesImplementedBySubclasses: typesImplementedBySubclasses, | 168 typesImplementedBySubclasses: typesImplementedBySubclasses, |
160 // TODO(johnniwinther): Support this: | 169 // TODO(johnniwinther): Support this: |
161 allTypedefs: new ImmutableEmptySet<TypedefElement>()); | 170 allTypedefs: new ImmutableEmptySet<TypedefElement>()); |
162 } | 171 } |
163 | 172 |
164 @override | 173 @override |
165 Sorter get sorter { | 174 Sorter get sorter { |
(...skipping 27 matching lines...) Expand all Loading... |
193 ClosedWorld closedWorld, | 202 ClosedWorld closedWorld, |
194 SelectorConstraintsStrategy selectorConstraintsStrategy) { | 203 SelectorConstraintsStrategy selectorConstraintsStrategy) { |
195 return new KernelCodegenWorldBuilder( | 204 return new KernelCodegenWorldBuilder( |
196 elementMap, | 205 elementMap, |
197 closedWorld.elementEnvironment, | 206 closedWorld.elementEnvironment, |
198 nativeBasicData, | 207 nativeBasicData, |
199 closedWorld, | 208 closedWorld, |
200 selectorConstraintsStrategy); | 209 selectorConstraintsStrategy); |
201 } | 210 } |
202 } | 211 } |
| 212 |
| 213 class JsRuntimeTypesNeed implements RuntimeTypesNeed { |
| 214 final JsToFrontendMap _map; |
| 215 final RuntimeTypesNeed _rtiNeed; |
| 216 |
| 217 JsRuntimeTypesNeed(this._map, this._rtiNeed); |
| 218 |
| 219 @override |
| 220 bool classNeedsRti(ClassEntity cls) { |
| 221 return _rtiNeed.classNeedsRti(_map.toFrontendClass(cls)); |
| 222 } |
| 223 |
| 224 @override |
| 225 bool classUsesTypeVariableExpression(ClassEntity cls) { |
| 226 return _rtiNeed.classUsesTypeVariableExpression(_map.toFrontendClass(cls)); |
| 227 } |
| 228 |
| 229 @override |
| 230 bool localFunctionNeedsRti(Local function) { |
| 231 throw new UnimplementedError('JsRuntimeTypesNeed.localFunctionNeedsRti'); |
| 232 } |
| 233 |
| 234 @override |
| 235 bool methodNeedsRti(FunctionEntity function) { |
| 236 return _rtiNeed.methodNeedsRti(_map.toFrontendMember(function)); |
| 237 } |
| 238 |
| 239 @override |
| 240 bool classNeedsRtiField(ClassEntity cls) { |
| 241 return _rtiNeed.classNeedsRtiField(_map.toFrontendClass(cls)); |
| 242 } |
| 243 } |
OLD | NEW |