| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 // Tests that the closed world computed from [WorldImpact]s derived from kernel | 5 // Tests that the closed world computed from [WorldImpact]s derived from kernel |
| 6 // is equivalent to the original computed from resolution. | 6 // is equivalent to the original computed from resolution. |
| 7 library dart2js.kernel.closed_world_test; | 7 library dart2js.kernel.closed_world_test; |
| 8 | 8 |
| 9 import 'package:async_helper/async_helper.dart'; | 9 import 'package:async_helper/async_helper.dart'; |
| 10 import 'package:compiler/src/commandline_options.dart'; | 10 import 'package:compiler/src/commandline_options.dart'; |
| 11 import 'package:compiler/src/common.dart'; | 11 import 'package:compiler/src/common.dart'; |
| 12 import 'package:compiler/src/common_elements.dart'; | 12 import 'package:compiler/src/common_elements.dart'; |
| 13 import 'package:compiler/src/common/work.dart'; | 13 import 'package:compiler/src/common/work.dart'; |
| 14 import 'package:compiler/src/compiler.dart'; | 14 import 'package:compiler/src/compiler.dart'; |
| 15 import 'package:compiler/src/enqueue.dart'; | 15 import 'package:compiler/src/enqueue.dart'; |
| 16 import 'package:compiler/src/js_backend/backend.dart'; | 16 import 'package:compiler/src/js_backend/backend.dart'; |
| 17 import 'package:compiler/src/js_backend/backend_impact.dart'; |
| 17 import 'package:compiler/src/js_backend/backend_usage.dart'; | 18 import 'package:compiler/src/js_backend/backend_usage.dart'; |
| 18 import 'package:compiler/src/js_backend/interceptor_data.dart'; | 19 import 'package:compiler/src/js_backend/interceptor_data.dart'; |
| 19 import 'package:compiler/src/js_backend/resolution_listener.dart'; | 20 import 'package:compiler/src/js_backend/resolution_listener.dart'; |
| 21 import 'package:compiler/src/js_backend/runtime_types.dart'; |
| 20 import 'package:compiler/src/js_backend/type_variable_handler.dart'; | 22 import 'package:compiler/src/js_backend/type_variable_handler.dart'; |
| 21 import 'package:compiler/src/serialization/equivalence.dart'; | 23 import 'package:compiler/src/serialization/equivalence.dart'; |
| 22 import 'package:compiler/src/universe/world_builder.dart'; | 24 import 'package:compiler/src/universe/world_builder.dart'; |
| 23 import 'package:compiler/src/universe/world_impact.dart'; | 25 import 'package:compiler/src/universe/world_impact.dart'; |
| 24 import 'package:compiler/src/world.dart'; | 26 import 'package:compiler/src/world.dart'; |
| 25 import '../memory_compiler.dart'; | 27 import '../memory_compiler.dart'; |
| 26 import '../serialization/helper.dart'; | 28 import '../serialization/helper.dart'; |
| 27 import '../equivalence/check_functions.dart'; | 29 import '../equivalence/check_functions.dart'; |
| 28 import 'test_helpers.dart'; | 30 import 'test_helpers.dart'; |
| 29 | 31 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 await compiler.run(entryPoint); | 83 await compiler.run(entryPoint); |
| 82 compiler.resolutionWorldBuilder.closeWorld(); | 84 compiler.resolutionWorldBuilder.closeWorld(); |
| 83 | 85 |
| 84 JavaScriptBackend backend = compiler.backend; | 86 JavaScriptBackend backend = compiler.backend; |
| 85 // Create a new resolution enqueuer and feed it with the [WorldImpact]s | 87 // Create a new resolution enqueuer and feed it with the [WorldImpact]s |
| 86 // computed from kernel through the [build] in `kernel_impact.dart`. | 88 // computed from kernel through the [build] in `kernel_impact.dart`. |
| 87 List list = createResolutionEnqueuerListener(compiler); | 89 List list = createResolutionEnqueuerListener(compiler); |
| 88 ResolutionEnqueuerListener resolutionEnqueuerListener = list[0]; | 90 ResolutionEnqueuerListener resolutionEnqueuerListener = list[0]; |
| 89 BackendUsageBuilder backendUsageBuilder = list[1]; | 91 BackendUsageBuilder backendUsageBuilder = list[1]; |
| 90 InterceptorDataBuilder interceptorDataBuilder = list[2]; | 92 InterceptorDataBuilder interceptorDataBuilder = list[2]; |
| 93 RuntimeTypesNeedBuilder rtiNeedBuilder = list[3]; |
| 91 ResolutionEnqueuer enqueuer = new ResolutionEnqueuer( | 94 ResolutionEnqueuer enqueuer = new ResolutionEnqueuer( |
| 92 compiler.enqueuer, | 95 compiler.enqueuer, |
| 93 compiler.options, | 96 compiler.options, |
| 94 compiler.reporter, | 97 compiler.reporter, |
| 95 const TreeShakingEnqueuerStrategy(), | 98 const TreeShakingEnqueuerStrategy(), |
| 96 resolutionEnqueuerListener, | 99 resolutionEnqueuerListener, |
| 97 new ElementResolutionWorldBuilder( | 100 new ElementResolutionWorldBuilder( |
| 98 backend, | 101 backend, |
| 99 compiler.resolution, | 102 compiler.resolution, |
| 100 backend.nativeBasicData, | 103 compiler.frontendStrategy.nativeBasicData, |
| 101 backend.nativeDataBuilder, | 104 backend.nativeDataBuilder, |
| 102 interceptorDataBuilder, | 105 interceptorDataBuilder, |
| 103 backendUsageBuilder, | 106 backendUsageBuilder, |
| 107 rtiNeedBuilder, |
| 108 backend.nativeResolutionEnqueuerForTesting, |
| 104 const OpenWorldStrategy()), | 109 const OpenWorldStrategy()), |
| 105 new KernelTestWorkItemBuilder(compiler), | 110 new KernelTestWorkItemBuilder(compiler), |
| 106 'enqueuer from kernel'); | 111 'enqueuer from kernel'); |
| 107 ClosedWorld closedWorld = computeClosedWorld(compiler.reporter, enqueuer, | 112 ClosedWorld closedWorld = computeClosedWorld(compiler.reporter, enqueuer, |
| 108 compiler.frontendStrategy.elementEnvironment); | 113 compiler.frontendStrategy.elementEnvironment); |
| 109 BackendUsage backendUsage = backendUsageBuilder.close(); | 114 BackendUsage backendUsage = backendUsageBuilder.close(); |
| 110 checkResolutionEnqueuers( | 115 checkResolutionEnqueuers( |
| 111 backendUsage, backendUsage, compiler.enqueuer.resolution, enqueuer, | 116 backendUsage, backendUsage, compiler.enqueuer.resolution, enqueuer, |
| 112 typeEquivalence: (a, b) => areTypesEquivalent(unalias(a), unalias(b)), | 117 typeEquivalence: (a, b) => areTypesEquivalent(unalias(a), unalias(b)), |
| 113 elementFilter: elementFilter, | 118 elementFilter: elementFilter, |
| 114 verbose: arguments.verbose, | 119 verbose: arguments.verbose, |
| 115 // TODO(johnniwinther): Support class usage testing in presence of | 120 // TODO(johnniwinther): Support class usage testing in presence of |
| 116 // redirecting constructors. | 121 // redirecting constructors. |
| 117 skipClassUsageTesting: true); | 122 skipClassUsageTesting: true); |
| 118 checkClosedWorlds( | 123 checkClosedWorlds( |
| 119 compiler.resolutionWorldBuilder.closedWorldForTesting, closedWorld, | 124 compiler.resolutionWorldBuilder.closedWorldForTesting, closedWorld, |
| 120 verbose: arguments.verbose); | 125 verbose: arguments.verbose); |
| 121 }); | 126 }); |
| 122 } | 127 } |
| 123 | 128 |
| 124 List createResolutionEnqueuerListener(Compiler compiler) { | 129 List createResolutionEnqueuerListener(Compiler compiler) { |
| 125 JavaScriptBackend backend = compiler.backend; | 130 JavaScriptBackend backend = compiler.backend; |
| 126 BackendUsageBuilder backendUsageBuilder = | 131 BackendUsageBuilder backendUsageBuilder = |
| 127 new BackendUsageBuilderImpl(compiler.frontendStrategy.commonElements); | 132 new BackendUsageBuilderImpl(compiler.frontendStrategy.commonElements); |
| 128 InterceptorDataBuilder interceptorDataBuilder = | 133 InterceptorDataBuilder interceptorDataBuilder = |
| 129 new InterceptorDataBuilderImpl( | 134 new InterceptorDataBuilderImpl( |
| 130 backend.nativeBasicData, | 135 compiler.frontendStrategy.nativeBasicData, |
| 131 compiler.frontendStrategy.elementEnvironment, | 136 compiler.frontendStrategy.elementEnvironment, |
| 132 compiler.frontendStrategy.commonElements); | 137 compiler.frontendStrategy.commonElements); |
| 138 RuntimeTypesNeedBuilder rtiNeedBuilder = |
| 139 compiler.frontendStrategy.createRuntimeTypesNeedBuilder(); |
| 140 BackendImpacts impacts = new BackendImpacts( |
| 141 compiler.options, compiler.frontendStrategy.commonElements); |
| 133 ResolutionEnqueuerListener listener = new ResolutionEnqueuerListener( | 142 ResolutionEnqueuerListener listener = new ResolutionEnqueuerListener( |
| 134 compiler.options, | 143 compiler.options, |
| 135 compiler.frontendStrategy.elementEnvironment, | 144 compiler.frontendStrategy.elementEnvironment, |
| 136 compiler.frontendStrategy.commonElements, | 145 compiler.frontendStrategy.commonElements, |
| 137 backend.impacts, | 146 impacts, |
| 138 backend.nativeBasicData, | 147 compiler.frontendStrategy.nativeBasicData, |
| 139 interceptorDataBuilder, | 148 interceptorDataBuilder, |
| 140 backendUsageBuilder, | 149 backendUsageBuilder, |
| 141 backend.rtiNeedBuilder, | 150 rtiNeedBuilder, |
| 142 backend.mirrorsDataBuilder, | 151 backend.mirrorsDataBuilder, |
| 143 backend.noSuchMethodRegistry, | 152 backend.noSuchMethodRegistry, |
| 144 backend.customElementsResolutionAnalysis, | 153 backend.customElementsResolutionAnalysis, |
| 145 backend.lookupMapResolutionAnalysis, | 154 backend.lookupMapResolutionAnalysis, |
| 146 backend.mirrorsResolutionAnalysis, | 155 backend.mirrorsResolutionAnalysis, |
| 147 new TypeVariableResolutionAnalysis( | 156 new TypeVariableResolutionAnalysis( |
| 148 compiler.frontendStrategy.elementEnvironment, | 157 compiler.frontendStrategy.elementEnvironment, |
| 149 backend.impacts, | 158 impacts, |
| 150 backendUsageBuilder), | 159 backendUsageBuilder), |
| 151 backend.nativeResolutionEnqueuerForTesting, | 160 backend.nativeResolutionEnqueuerForTesting, |
| 152 compiler.deferredLoadTask, | 161 compiler.deferredLoadTask, |
| 153 backend.kernelTask); | 162 backend.kernelTask); |
| 154 return [listener, backendUsageBuilder, interceptorDataBuilder]; | 163 return [ |
| 164 listener, |
| 165 backendUsageBuilder, |
| 166 interceptorDataBuilder, |
| 167 rtiNeedBuilder |
| 168 ]; |
| 155 } | 169 } |
| 156 | 170 |
| 157 ClosedWorld computeClosedWorld(DiagnosticReporter reporter, | 171 ClosedWorld computeClosedWorld(DiagnosticReporter reporter, |
| 158 ResolutionEnqueuer enqueuer, ElementEnvironment elementEnvironment) { | 172 ResolutionEnqueuer enqueuer, ElementEnvironment elementEnvironment) { |
| 159 enqueuer.open(const ImpactStrategy(), elementEnvironment.mainFunction, | 173 enqueuer.open(const ImpactStrategy(), elementEnvironment.mainFunction, |
| 160 elementEnvironment.libraries); | 174 elementEnvironment.libraries); |
| 161 enqueuer.forEach((WorkItem work) { | 175 enqueuer.forEach((WorkItem work) { |
| 162 enqueuer.applyImpact(work.run(), impactSource: work.element); | 176 enqueuer.applyImpact(work.run(), impactSource: work.element); |
| 163 }); | 177 }); |
| 164 return enqueuer.worldBuilder.closeWorld(); | 178 return enqueuer.worldBuilder.closeWorld(); |
| 165 } | 179 } |
| OLD | NEW |