| 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 'package:kernel/ast.dart' as ir; | 7 import 'package:kernel/ast.dart' as ir; |
| 8 | 8 |
| 9 import '../closure.dart' show ClosureConversionTask; | 9 import '../closure.dart' show ClosureConversionTask; |
| 10 import '../common.dart'; | 10 import '../common.dart'; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 import '../world.dart'; | 38 import '../world.dart'; |
| 39 import 'closure.dart'; | 39 import 'closure.dart'; |
| 40 import 'elements.dart'; | 40 import 'elements.dart'; |
| 41 import 'locals.dart'; | 41 import 'locals.dart'; |
| 42 | 42 |
| 43 class JsBackendStrategy implements KernelBackendStrategy { | 43 class JsBackendStrategy implements KernelBackendStrategy { |
| 44 final Compiler _compiler; | 44 final Compiler _compiler; |
| 45 ElementEnvironment _elementEnvironment; | 45 ElementEnvironment _elementEnvironment; |
| 46 CommonElements _commonElements; | 46 CommonElements _commonElements; |
| 47 JsKernelToElementMap _elementMap; | 47 JsKernelToElementMap _elementMap; |
| 48 ClosureConversionTask _closureDataLookup; | 48 KernelClosureConversionTask _closureDataLookup; |
| 49 final GlobalLocalsMap _globalLocalsMap = new GlobalLocalsMap(); | 49 final GlobalLocalsMap _globalLocalsMap = new GlobalLocalsMap(); |
| 50 Sorter _sorter; | 50 Sorter _sorter; |
| 51 | 51 |
| 52 JsBackendStrategy(this._compiler); | 52 JsBackendStrategy(this._compiler); |
| 53 | 53 |
| 54 KernelToElementMapForBuilding get elementMap { | 54 KernelToElementMapForBuilding get elementMap { |
| 55 assert(_elementMap != null, | 55 assert(_elementMap != null, |
| 56 "JsBackendStrategy.elementMap has not been created yet."); | 56 "JsBackendStrategy.elementMap has not been created yet."); |
| 57 return _elementMap; | 57 return _elementMap; |
| 58 } | 58 } |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 285 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses = | 285 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses = |
| 286 map.toBackendClassMap( | 286 map.toBackendClassMap( |
| 287 closedWorld.typesImplementedBySubclasses, map.toBackendClassSet); | 287 closedWorld.typesImplementedBySubclasses, map.toBackendClassSet); |
| 288 | 288 |
| 289 Iterable<MemberEntity> assignedInstanceMembers = | 289 Iterable<MemberEntity> assignedInstanceMembers = |
| 290 map.toBackendMemberSet(closedWorld.assignedInstanceMembers); | 290 map.toBackendMemberSet(closedWorld.assignedInstanceMembers); |
| 291 | 291 |
| 292 Iterable<ClassEntity> liveNativeClasses = | 292 Iterable<ClassEntity> liveNativeClasses = |
| 293 map.toBackendClassSet(closedWorld.liveNativeClasses); | 293 map.toBackendClassSet(closedWorld.liveNativeClasses); |
| 294 | 294 |
| 295 Iterable<MemberEntity> processedMembers = |
| 296 map.toBackendMemberSet(closedWorld.processedMembers); |
| 297 |
| 295 RuntimeTypesNeed rtiNeed = | 298 RuntimeTypesNeed rtiNeed = |
| 296 _convertRuntimeTypesNeed(map, backendUsage, closedWorld.rtiNeed); | 299 _convertRuntimeTypesNeed(map, backendUsage, closedWorld.rtiNeed); |
| 297 | 300 |
| 298 return new JsClosedWorld(_elementMap, | 301 return new JsClosedWorld(_elementMap, |
| 299 elementEnvironment: _elementEnvironment, | 302 elementEnvironment: _elementEnvironment, |
| 300 dartTypes: _elementMap.types, | 303 dartTypes: _elementMap.types, |
| 301 commonElements: _commonElements, | 304 commonElements: _commonElements, |
| 302 constantSystem: const JavaScriptConstantSystem(), | 305 constantSystem: const JavaScriptConstantSystem(), |
| 303 backendUsage: backendUsage, | 306 backendUsage: backendUsage, |
| 304 nativeData: nativeData, | 307 nativeData: nativeData, |
| 305 interceptorData: interceptorData, | 308 interceptorData: interceptorData, |
| 306 rtiNeed: rtiNeed, | 309 rtiNeed: rtiNeed, |
| 307 classHierarchyNodes: classHierarchyNodes, | 310 classHierarchyNodes: classHierarchyNodes, |
| 308 classSets: classSets, | 311 classSets: classSets, |
| 309 implementedClasses: implementedClasses, | 312 implementedClasses: implementedClasses, |
| 310 liveNativeClasses: liveNativeClasses, | 313 liveNativeClasses: liveNativeClasses, |
| 311 liveInstanceMembers: liveInstanceMembers, | 314 liveInstanceMembers: liveInstanceMembers, |
| 312 assignedInstanceMembers: assignedInstanceMembers, | 315 assignedInstanceMembers: assignedInstanceMembers, |
| 316 processedMembers: processedMembers, |
| 313 mixinUses: mixinUses, | 317 mixinUses: mixinUses, |
| 314 typesImplementedBySubclasses: typesImplementedBySubclasses, | 318 typesImplementedBySubclasses: typesImplementedBySubclasses, |
| 315 // TODO(johnniwinther): Support this: | 319 // TODO(johnniwinther): Support this: |
| 316 allTypedefs: new ImmutableEmptySet<TypedefEntity>()); | 320 allTypedefs: new ImmutableEmptySet<TypedefEntity>()); |
| 317 } | 321 } |
| 318 | 322 |
| 319 @override | 323 @override |
| 320 Sorter get sorter { | 324 Sorter get sorter { |
| 321 return _sorter ??= new KernelSorter(elementMap); | 325 return _sorter ??= new KernelSorter(elementMap); |
| 322 } | 326 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 354 } | 358 } |
| 355 | 359 |
| 356 @override | 360 @override |
| 357 SourceSpan spanFromSpannable(Spannable spannable, Entity currentElement) { | 361 SourceSpan spanFromSpannable(Spannable spannable, Entity currentElement) { |
| 358 return _elementMap.getSourceSpan(spannable, currentElement); | 362 return _elementMap.getSourceSpan(spannable, currentElement); |
| 359 } | 363 } |
| 360 | 364 |
| 361 @override | 365 @override |
| 362 TypesInferrer createTypesInferrer(ClosedWorldRefiner closedWorldRefiner, | 366 TypesInferrer createTypesInferrer(ClosedWorldRefiner closedWorldRefiner, |
| 363 {bool disableTypeInference: false}) { | 367 {bool disableTypeInference: false}) { |
| 364 return new KernelTypeGraphInferrer( | 368 return new KernelTypeGraphInferrer(_compiler, _elementMap, _globalLocalsMap, |
| 365 _compiler, closedWorldRefiner.closedWorld, closedWorldRefiner, | 369 _closureDataLookup, closedWorldRefiner.closedWorld, closedWorldRefiner, |
| 366 disableTypeInference: disableTypeInference); | 370 disableTypeInference: disableTypeInference); |
| 367 } | 371 } |
| 368 } | 372 } |
| 369 | 373 |
| 370 class JsClosedWorld extends ClosedWorldBase with KernelClosedWorldMixin { | 374 class JsClosedWorld extends ClosedWorldBase with KernelClosedWorldMixin { |
| 371 final JsKernelToElementMap elementMap; | 375 final JsKernelToElementMap elementMap; |
| 372 final RuntimeTypesNeed rtiNeed; | 376 final RuntimeTypesNeed rtiNeed; |
| 373 | 377 |
| 374 JsClosedWorld(this.elementMap, | 378 JsClosedWorld(this.elementMap, |
| 375 {ElementEnvironment elementEnvironment, | 379 {ElementEnvironment elementEnvironment, |
| 376 DartTypes dartTypes, | 380 DartTypes dartTypes, |
| 377 CommonElements commonElements, | 381 CommonElements commonElements, |
| 378 ConstantSystem constantSystem, | 382 ConstantSystem constantSystem, |
| 379 NativeData nativeData, | 383 NativeData nativeData, |
| 380 InterceptorData interceptorData, | 384 InterceptorData interceptorData, |
| 381 BackendUsage backendUsage, | 385 BackendUsage backendUsage, |
| 382 this.rtiNeed, | 386 this.rtiNeed, |
| 383 Set<ClassEntity> implementedClasses, | 387 Set<ClassEntity> implementedClasses, |
| 384 Iterable<ClassEntity> liveNativeClasses, | 388 Iterable<ClassEntity> liveNativeClasses, |
| 385 Iterable<MemberEntity> liveInstanceMembers, | 389 Iterable<MemberEntity> liveInstanceMembers, |
| 386 Iterable<MemberEntity> assignedInstanceMembers, | 390 Iterable<MemberEntity> assignedInstanceMembers, |
| 391 Iterable<MemberEntity> processedMembers, |
| 387 Set<TypedefEntity> allTypedefs, | 392 Set<TypedefEntity> allTypedefs, |
| 388 Map<ClassEntity, Set<ClassEntity>> mixinUses, | 393 Map<ClassEntity, Set<ClassEntity>> mixinUses, |
| 389 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses, | 394 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses, |
| 390 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes, | 395 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes, |
| 391 Map<ClassEntity, ClassSet> classSets}) | 396 Map<ClassEntity, ClassSet> classSets}) |
| 392 : super( | 397 : super( |
| 393 elementEnvironment, | 398 elementEnvironment, |
| 394 dartTypes, | 399 dartTypes, |
| 395 commonElements, | 400 commonElements, |
| 396 constantSystem, | 401 constantSystem, |
| 397 nativeData, | 402 nativeData, |
| 398 interceptorData, | 403 interceptorData, |
| 399 backendUsage, | 404 backendUsage, |
| 400 implementedClasses, | 405 implementedClasses, |
| 401 liveNativeClasses, | 406 liveNativeClasses, |
| 402 liveInstanceMembers, | 407 liveInstanceMembers, |
| 403 assignedInstanceMembers, | 408 assignedInstanceMembers, |
| 409 processedMembers, |
| 404 allTypedefs, | 410 allTypedefs, |
| 405 mixinUses, | 411 mixinUses, |
| 406 typesImplementedBySubclasses, | 412 typesImplementedBySubclasses, |
| 407 classHierarchyNodes, | 413 classHierarchyNodes, |
| 408 classSets); | 414 classSets); |
| 409 | 415 |
| 410 /// Construct a closure class and set up the necessary class inference | 416 /// Construct a closure class and set up the necessary class inference |
| 411 /// hierarchy. | 417 /// hierarchy. |
| 412 KernelClosureClass buildClosureClass( | 418 KernelClosureClass buildClosureClass( |
| 413 MemberEntity member, | 419 MemberEntity member, |
| (...skipping 29 matching lines...) Expand all Loading... |
| 443 node.isDirectlyInstantiated = true; | 449 node.isDirectlyInstantiated = true; |
| 444 | 450 |
| 445 return cls; | 451 return cls; |
| 446 } | 452 } |
| 447 | 453 |
| 448 @override | 454 @override |
| 449 void registerClosureClass(ClassEntity cls) { | 455 void registerClosureClass(ClassEntity cls) { |
| 450 throw new UnsupportedError('JsClosedWorld.registerClosureClass'); | 456 throw new UnsupportedError('JsClosedWorld.registerClosureClass'); |
| 451 } | 457 } |
| 452 } | 458 } |
| OLD | NEW |