| 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 // Partial test that the closed world computed from [WorldImpact]s derived from | 5 // Partial test that the closed world computed from [WorldImpact]s derived from |
| 6 // kernel is equivalent to the original computed from resolution. | 6 // kernel is equivalent to the original computed from resolution. |
| 7 library dart2js.kernel.closed_world2_test; | 7 library dart2js.kernel.closed_world2_test; |
| 8 | 8 |
| 9 import 'package:async_helper/async_helper.dart'; | 9 import 'package:async_helper/async_helper.dart'; |
| 10 import 'package:compiler/src/closure.dart'; | 10 import 'package:compiler/src/closure.dart'; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 import 'package:compiler/src/js_backend/native_data.dart'; | 28 import 'package:compiler/src/js_backend/native_data.dart'; |
| 29 import 'package:compiler/src/js_backend/impact_transformer.dart'; | 29 import 'package:compiler/src/js_backend/impact_transformer.dart'; |
| 30 import 'package:compiler/src/js_backend/interceptor_data.dart'; | 30 import 'package:compiler/src/js_backend/interceptor_data.dart'; |
| 31 import 'package:compiler/src/js_backend/lookup_map_analysis.dart'; | 31 import 'package:compiler/src/js_backend/lookup_map_analysis.dart'; |
| 32 import 'package:compiler/src/js_backend/mirrors_analysis.dart'; | 32 import 'package:compiler/src/js_backend/mirrors_analysis.dart'; |
| 33 import 'package:compiler/src/js_backend/mirrors_data.dart'; | 33 import 'package:compiler/src/js_backend/mirrors_data.dart'; |
| 34 import 'package:compiler/src/js_backend/no_such_method_registry.dart'; | 34 import 'package:compiler/src/js_backend/no_such_method_registry.dart'; |
| 35 import 'package:compiler/src/js_backend/resolution_listener.dart'; | 35 import 'package:compiler/src/js_backend/resolution_listener.dart'; |
| 36 import 'package:compiler/src/js_backend/type_variable_handler.dart'; | 36 import 'package:compiler/src/js_backend/type_variable_handler.dart'; |
| 37 import 'package:compiler/src/native/enqueue.dart'; | 37 import 'package:compiler/src/native/enqueue.dart'; |
| 38 import 'package:compiler/src/kernel/world_builder.dart'; | 38 import 'package:compiler/src/kernel/element_builder.dart'; |
| 39 import 'package:compiler/src/options.dart'; | 39 import 'package:compiler/src/options.dart'; |
| 40 import 'package:compiler/src/universe/world_builder.dart'; | 40 import 'package:compiler/src/universe/world_builder.dart'; |
| 41 import 'package:compiler/src/universe/world_impact.dart'; | 41 import 'package:compiler/src/universe/world_impact.dart'; |
| 42 import 'package:compiler/src/world.dart'; | 42 import 'package:compiler/src/world.dart'; |
| 43 import '../memory_compiler.dart'; | 43 import '../memory_compiler.dart'; |
| 44 import '../serialization/helper.dart'; | 44 import '../serialization/helper.dart'; |
| 45 | 45 |
| 46 import 'closed_world_test.dart'; | 46 import 'closed_world_test.dart'; |
| 47 | 47 |
| 48 main(List<String> args) { | 48 main(List<String> args) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 65 options: [ | 65 options: [ |
| 66 Flags.analyzeAll, | 66 Flags.analyzeAll, |
| 67 Flags.useKernel, | 67 Flags.useKernel, |
| 68 Flags.enableAssertMessage | 68 Flags.enableAssertMessage |
| 69 ]); | 69 ]); |
| 70 ElementResolutionWorldBuilder.useInstantiationMap = true; | 70 ElementResolutionWorldBuilder.useInstantiationMap = true; |
| 71 compiler.resolution.retainCachesForTesting = true; | 71 compiler.resolution.retainCachesForTesting = true; |
| 72 await compiler.run(entryPoint); | 72 await compiler.run(entryPoint); |
| 73 compiler.resolutionWorldBuilder.closeWorld(compiler.reporter); | 73 compiler.resolutionWorldBuilder.closeWorld(compiler.reporter); |
| 74 | 74 |
| 75 KernelWorldBuilder worldBuilder = new KernelWorldBuilder( | 75 KernelElementBuilder elementBuilder = new KernelElementBuilder( |
| 76 compiler.reporter, compiler.backend.kernelTask.program); | 76 compiler.reporter, compiler.backend.kernelTask.program); |
| 77 List list = createKernelResolutionEnqueuerListener(compiler.options, | 77 List list = createKernelResolutionEnqueuerListener(compiler.options, |
| 78 compiler.reporter, compiler.deferredLoadTask, worldBuilder); | 78 compiler.reporter, compiler.deferredLoadTask, elementBuilder); |
| 79 ResolutionEnqueuerListener resolutionEnqueuerListener = list[0]; | 79 ResolutionEnqueuerListener resolutionEnqueuerListener = list[0]; |
| 80 ImpactTransformer impactTransformer = list[1]; | 80 ImpactTransformer impactTransformer = list[1]; |
| 81 ResolutionEnqueuer enqueuer = new ResolutionEnqueuer( | 81 ResolutionEnqueuer enqueuer = new ResolutionEnqueuer( |
| 82 compiler.enqueuer, | 82 compiler.enqueuer, |
| 83 compiler.options, | 83 compiler.options, |
| 84 compiler.reporter, | 84 compiler.reporter, |
| 85 const TreeShakingEnqueuerStrategy(), | 85 const TreeShakingEnqueuerStrategy(), |
| 86 resolutionEnqueuerListener, | 86 resolutionEnqueuerListener, |
| 87 new KernelResolutionWorldBuilder( | 87 new KernelResolutionWorldBuilder( |
| 88 worldBuilder.elementEnvironment, | 88 elementBuilder.elementEnvironment, |
| 89 worldBuilder.commonElements, | 89 elementBuilder.commonElements, |
| 90 new NativeBasicDataImpl(), | 90 new NativeBasicDataImpl(), |
| 91 const OpenWorldStrategy()), | 91 const OpenWorldStrategy()), |
| 92 new KernelWorkItemBuilder(worldBuilder, impactTransformer), | 92 new KernelWorkItemBuilder(elementBuilder, impactTransformer), |
| 93 'enqueuer from kelements'); | 93 'enqueuer from kelements'); |
| 94 | 94 |
| 95 computeClosedWorld( | 95 computeClosedWorld( |
| 96 compiler.reporter, enqueuer, worldBuilder.elementEnvironment); | 96 compiler.reporter, enqueuer, elementBuilder.elementEnvironment); |
| 97 }); | 97 }); |
| 98 } | 98 } |
| 99 | 99 |
| 100 List createKernelResolutionEnqueuerListener( | 100 List createKernelResolutionEnqueuerListener( |
| 101 CompilerOptions options, | 101 CompilerOptions options, |
| 102 DiagnosticReporter reporter, | 102 DiagnosticReporter reporter, |
| 103 DeferredLoadTask deferredLoadTask, | 103 DeferredLoadTask deferredLoadTask, |
| 104 KernelWorldBuilder worldBuilder) { | 104 KernelElementBuilder elementBuilder) { |
| 105 ElementEnvironment elementEnvironment = worldBuilder.elementEnvironment; | 105 ElementEnvironment elementEnvironment = elementBuilder.elementEnvironment; |
| 106 CommonElements commonElements = worldBuilder.commonElements; | 106 CommonElements commonElements = elementBuilder.commonElements; |
| 107 BackendImpacts impacts = new BackendImpacts(options, commonElements); | 107 BackendImpacts impacts = new BackendImpacts(options, commonElements); |
| 108 | 108 |
| 109 // TODO(johnniwinther): Create Kernel based implementations for these: | 109 // TODO(johnniwinther): Create Kernel based implementations for these: |
| 110 NativeBasicData nativeBasicData = new NativeBasicDataImpl(); | 110 NativeBasicData nativeBasicData = new NativeBasicDataImpl(); |
| 111 RuntimeTypesNeedBuilder rtiNeedBuilder = new RuntimeTypesNeedBuilderImpl(); | 111 RuntimeTypesNeedBuilder rtiNeedBuilder = new RuntimeTypesNeedBuilderImpl(); |
| 112 MirrorsDataBuilder mirrorsDataBuilder = new MirrorsDataBuilderImpl(); | 112 MirrorsDataBuilder mirrorsDataBuilder = new MirrorsDataBuilderImpl(); |
| 113 CustomElementsResolutionAnalysis customElementsResolutionAnalysis = | 113 CustomElementsResolutionAnalysis customElementsResolutionAnalysis = |
| 114 new CustomElementsResolutionAnalysisImpl(); | 114 new CustomElementsResolutionAnalysisImpl(); |
| 115 MirrorsResolutionAnalysis mirrorsResolutionAnalysis = | 115 MirrorsResolutionAnalysis mirrorsResolutionAnalysis = |
| 116 new MirrorsResolutionAnalysisImpl(); | 116 new MirrorsResolutionAnalysisImpl(); |
| 117 LookupMapResolutionAnalysis lookupMapResolutionAnalysis = | 117 LookupMapResolutionAnalysis lookupMapResolutionAnalysis = |
| 118 new LookupMapResolutionAnalysis(reporter, elementEnvironment); | 118 new LookupMapResolutionAnalysis(reporter, elementEnvironment); |
| 119 InterceptorDataBuilder interceptorDataBuilder = | 119 InterceptorDataBuilder interceptorDataBuilder = |
| 120 new InterceptorDataBuilderImpl( | 120 new InterceptorDataBuilderImpl( |
| 121 nativeBasicData, elementEnvironment, commonElements); | 121 nativeBasicData, elementEnvironment, commonElements); |
| 122 BackendUsageBuilder backendUsageBuilder = | 122 BackendUsageBuilder backendUsageBuilder = |
| 123 new BackendUsageBuilderImpl(commonElements); | 123 new BackendUsageBuilderImpl(commonElements); |
| 124 NoSuchMethodRegistry noSuchMethodRegistry = new NoSuchMethodRegistry( | 124 NoSuchMethodRegistry noSuchMethodRegistry = new NoSuchMethodRegistry( |
| 125 commonElements, new KernelNoSuchMethodResolver(worldBuilder)); | 125 commonElements, new KernelNoSuchMethodResolver(elementBuilder)); |
| 126 NativeResolutionEnqueuer nativeResolutionEnqueuer = | 126 NativeResolutionEnqueuer nativeResolutionEnqueuer = |
| 127 new NativeResolutionEnqueuer(options, elementEnvironment, commonElements, | 127 new NativeResolutionEnqueuer(options, elementEnvironment, commonElements, |
| 128 backendUsageBuilder, new KernelNativeClassResolver(worldBuilder)); | 128 backendUsageBuilder, new KernelNativeClassResolver(elementBuilder)); |
| 129 | 129 |
| 130 ResolutionEnqueuerListener listener = new ResolutionEnqueuerListener( | 130 ResolutionEnqueuerListener listener = new ResolutionEnqueuerListener( |
| 131 options, | 131 options, |
| 132 elementEnvironment, | 132 elementEnvironment, |
| 133 commonElements, | 133 commonElements, |
| 134 impacts, | 134 impacts, |
| 135 nativeBasicData, | 135 nativeBasicData, |
| 136 interceptorDataBuilder, | 136 interceptorDataBuilder, |
| 137 backendUsageBuilder, | 137 backendUsageBuilder, |
| 138 rtiNeedBuilder, | 138 rtiNeedBuilder, |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 @override | 267 @override |
| 268 MirrorsCodegenAnalysis close() { | 268 MirrorsCodegenAnalysis close() { |
| 269 throw new UnimplementedError('MirrorsResolutionAnalysisImpl.close'); | 269 throw new UnimplementedError('MirrorsResolutionAnalysisImpl.close'); |
| 270 } | 270 } |
| 271 | 271 |
| 272 @override | 272 @override |
| 273 void onResolutionComplete() {} | 273 void onResolutionComplete() {} |
| 274 } | 274 } |
| 275 | 275 |
| 276 class KernelWorkItemBuilder implements WorkItemBuilder { | 276 class KernelWorkItemBuilder implements WorkItemBuilder { |
| 277 final KernelWorldBuilder _worldBuilder; | 277 final KernelElementBuilder _worldBuilder; |
| 278 final ImpactTransformer _impactTransformer; | 278 final ImpactTransformer _impactTransformer; |
| 279 | 279 |
| 280 KernelWorkItemBuilder(this._worldBuilder, this._impactTransformer); | 280 KernelWorkItemBuilder(this._worldBuilder, this._impactTransformer); |
| 281 | 281 |
| 282 @override | 282 @override |
| 283 WorkItem createWorkItem(MemberEntity entity) { | 283 WorkItem createWorkItem(MemberEntity entity) { |
| 284 return new KernelWorkItem(_worldBuilder, _impactTransformer, entity); | 284 return new KernelWorkItem(_worldBuilder, _impactTransformer, entity); |
| 285 } | 285 } |
| 286 } | 286 } |
| 287 | 287 |
| 288 class KernelWorkItem implements ResolutionWorkItem { | 288 class KernelWorkItem implements ResolutionWorkItem { |
| 289 final KernelWorldBuilder _worldBuilder; | 289 final KernelElementBuilder _worldBuilder; |
| 290 final ImpactTransformer _impactTransformer; | 290 final ImpactTransformer _impactTransformer; |
| 291 final MemberEntity element; | 291 final MemberEntity element; |
| 292 | 292 |
| 293 KernelWorkItem(this._worldBuilder, this._impactTransformer, this.element); | 293 KernelWorkItem(this._worldBuilder, this._impactTransformer, this.element); |
| 294 | 294 |
| 295 @override | 295 @override |
| 296 WorldImpact run() { | 296 WorldImpact run() { |
| 297 ResolutionImpact impact = _worldBuilder.computeWorldImpact(element); | 297 ResolutionImpact impact = _worldBuilder.computeWorldImpact(element); |
| 298 return _impactTransformer.transformResolutionImpact(impact); | 298 return _impactTransformer.transformResolutionImpact(impact); |
| 299 } | 299 } |
| 300 } | 300 } |
| OLD | NEW |