| 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.kernel.backend_strategy; | 5 library dart2js.kernel.backend_strategy; |
| 6 | 6 |
| 7 import 'package:kernel/ast.dart' as ir; | 7 import 'package:kernel/ast.dart' as ir; |
| 8 | 8 |
| 9 import '../backend_strategy.dart'; | 9 import '../backend_strategy.dart'; |
| 10 import '../closure.dart'; | 10 import '../closure.dart'; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 import '../ssa/types.dart'; | 30 import '../ssa/types.dart'; |
| 31 import '../types/types.dart'; | 31 import '../types/types.dart'; |
| 32 import '../universe/selector.dart'; | 32 import '../universe/selector.dart'; |
| 33 import '../universe/world_builder.dart'; | 33 import '../universe/world_builder.dart'; |
| 34 import '../universe/world_impact.dart'; | 34 import '../universe/world_impact.dart'; |
| 35 import '../world.dart'; | 35 import '../world.dart'; |
| 36 import 'closure.dart'; | 36 import 'closure.dart'; |
| 37 import 'element_map_impl.dart'; | 37 import 'element_map_impl.dart'; |
| 38 import 'kernel_strategy.dart'; | 38 import 'kernel_strategy.dart'; |
| 39 | 39 |
| 40 /// A backend strategy based on Kernel IR nodes. |
| 41 abstract class KernelBackendStrategy implements BackendStrategy { |
| 42 KernelToElementMap get elementMap; |
| 43 GlobalLocalsMap get globalLocalsMapForTesting; |
| 44 } |
| 45 |
| 40 /// Backend strategy that uses the kernel elements as the backend model. | 46 /// Backend strategy that uses the kernel elements as the backend model. |
| 41 // TODO(johnniwinther): Replace this with a strategy based on the J-element | 47 // TODO(johnniwinther): Replace this with a strategy based on the J-element |
| 42 // model. | 48 // model. |
| 43 class KernelBackendStrategy implements BackendStrategy { | 49 class KernelBackendStrategyImpl implements KernelBackendStrategy { |
| 44 final Compiler _compiler; | 50 final Compiler _compiler; |
| 45 Sorter _sorter; | 51 Sorter _sorter; |
| 46 ClosureConversionTask _closureDataLookup; | 52 ClosureConversionTask _closureDataLookup; |
| 47 GlobalLocalsMap _globalLocalsMap = new GlobalLocalsMap(); | 53 final GlobalLocalsMap _globalLocalsMap = new GlobalLocalsMap(); |
| 48 | 54 |
| 49 KernelBackendStrategy(this._compiler); | 55 KernelBackendStrategyImpl(this._compiler); |
| 50 | 56 |
| 51 KernelToElementMap get _elementMap { | 57 KernelToElementMap get elementMap { |
| 52 KernelFrontEndStrategy frontendStrategy = _compiler.frontendStrategy; | 58 KernelFrontEndStrategy frontendStrategy = _compiler.frontendStrategy; |
| 53 return frontendStrategy.elementMap; | 59 return frontendStrategy.elementMap; |
| 54 } | 60 } |
| 55 | 61 |
| 62 GlobalLocalsMap get globalLocalsMapForTesting => _globalLocalsMap; |
| 63 |
| 56 @override | 64 @override |
| 57 ClosedWorldRefiner createClosedWorldRefiner( | 65 ClosedWorldRefiner createClosedWorldRefiner( |
| 58 covariant KernelClosedWorld closedWorld) { | 66 covariant KernelClosedWorld closedWorld) { |
| 59 return closedWorld; | 67 return closedWorld; |
| 60 } | 68 } |
| 61 | 69 |
| 62 @override | 70 @override |
| 63 Sorter get sorter { | 71 Sorter get sorter { |
| 64 if (_sorter == null) { | 72 if (_sorter == null) { |
| 65 KernelFrontEndStrategy frontendStrategy = _compiler.frontendStrategy; | 73 _sorter = new KernelSorter(elementMap); |
| 66 _sorter = new KernelSorter(frontendStrategy.elementMap); | |
| 67 } | 74 } |
| 68 return _sorter; | 75 return _sorter; |
| 69 } | 76 } |
| 70 | 77 |
| 71 @override | 78 @override |
| 72 ClosureConversionTask get closureDataLookup => | 79 ClosureConversionTask get closureDataLookup => |
| 73 _closureDataLookup ??= new KernelClosureConversionTask( | 80 _closureDataLookup ??= new KernelClosureConversionTask( |
| 74 _compiler.measurer, _elementMap, _globalLocalsMap); | 81 _compiler.measurer, elementMap, _globalLocalsMap); |
| 75 | 82 |
| 76 @override | 83 @override |
| 77 WorkItemBuilder createCodegenWorkItemBuilder(ClosedWorld closedWorld) { | 84 WorkItemBuilder createCodegenWorkItemBuilder(ClosedWorld closedWorld) { |
| 78 return new KernelCodegenWorkItemBuilder(_compiler.backend, closedWorld); | 85 return new KernelCodegenWorkItemBuilder(_compiler.backend, closedWorld); |
| 79 } | 86 } |
| 80 | 87 |
| 81 @override | 88 @override |
| 82 CodegenWorldBuilder createCodegenWorldBuilder( | 89 CodegenWorldBuilder createCodegenWorldBuilder( |
| 83 NativeBasicData nativeBasicData, | 90 NativeBasicData nativeBasicData, |
| 84 ClosedWorld closedWorld, | 91 ClosedWorld closedWorld, |
| 85 SelectorConstraintsStrategy selectorConstraintsStrategy) { | 92 SelectorConstraintsStrategy selectorConstraintsStrategy) { |
| 86 return new KernelCodegenWorldBuilder( | 93 return new KernelCodegenWorldBuilder( |
| 87 _elementMap, | 94 elementMap, |
| 88 closedWorld.elementEnvironment, | 95 closedWorld.elementEnvironment, |
| 89 nativeBasicData, | 96 nativeBasicData, |
| 90 closedWorld, | 97 closedWorld, |
| 91 selectorConstraintsStrategy); | 98 selectorConstraintsStrategy); |
| 92 } | 99 } |
| 93 | 100 |
| 94 @override | 101 @override |
| 95 SsaBuilder createSsaBuilder(CompilerTask task, JavaScriptBackend backend, | 102 SsaBuilder createSsaBuilder(CompilerTask task, JavaScriptBackend backend, |
| 96 SourceInformationStrategy sourceInformationStrategy) { | 103 SourceInformationStrategy sourceInformationStrategy) { |
| 97 return new KernelSsaBuilder( | 104 return new KernelSsaBuilder( |
| 98 task, backend.compiler, _elementMap, _globalLocalsMap); | 105 task, backend.compiler, elementMap, _globalLocalsMap); |
| 99 } | 106 } |
| 100 | 107 |
| 101 @override | 108 @override |
| 102 SourceInformationStrategy get sourceInformationStrategy => | 109 SourceInformationStrategy get sourceInformationStrategy => |
| 103 const JavaScriptSourceInformationStrategy(); | 110 const JavaScriptSourceInformationStrategy(); |
| 104 } | 111 } |
| 105 | 112 |
| 106 class KernelCodegenWorkItemBuilder implements WorkItemBuilder { | 113 class KernelCodegenWorkItemBuilder implements WorkItemBuilder { |
| 107 final JavaScriptBackend _backend; | 114 final JavaScriptBackend _backend; |
| 108 final ClosedWorld _closedWorld; | 115 final ClosedWorld _closedWorld; |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 Iterable<ClassEntity> sortClasses(Iterable<ClassEntity> classes) { | 381 Iterable<ClassEntity> sortClasses(Iterable<ClassEntity> classes) { |
| 375 return classes.toList() | 382 return classes.toList() |
| 376 ..sort((ClassEntity a, ClassEntity b) { | 383 ..sort((ClassEntity a, ClassEntity b) { |
| 377 int r = _compareLibraries(a.library, b.library); | 384 int r = _compareLibraries(a.library, b.library); |
| 378 if (r != 0) return r; | 385 if (r != 0) return r; |
| 379 return _compareNodes( | 386 return _compareNodes( |
| 380 a, elementMap.getClassNode(a), b, elementMap.getClassNode(b)); | 387 a, elementMap.getClassNode(a), b, elementMap.getClassNode(b)); |
| 381 }); | 388 }); |
| 382 } | 389 } |
| 383 } | 390 } |
| OLD | NEW |