| 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 |