| 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'; |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 compiler.resolution.retainCachesForTesting = true; | 86 compiler.resolution.retainCachesForTesting = true; |
| 87 await compiler.run(entryPoint); | 87 await compiler.run(entryPoint); |
| 88 compiler.resolutionWorldBuilder.closeWorld(); | 88 compiler.resolutionWorldBuilder.closeWorld(); |
| 89 | 89 |
| 90 JavaScriptBackend backend = compiler.backend; | 90 JavaScriptBackend backend = compiler.backend; |
| 91 // Create a new resolution enqueuer and feed it with the [WorldImpact]s | 91 // Create a new resolution enqueuer and feed it with the [WorldImpact]s |
| 92 // computed from kernel through the [build] in `kernel_impact.dart`. | 92 // computed from kernel through the [build] in `kernel_impact.dart`. |
| 93 List list = createResolutionEnqueuerListener(compiler); | 93 List list = createResolutionEnqueuerListener(compiler); |
| 94 ResolutionEnqueuerListener resolutionEnqueuerListener = list[0]; | 94 ResolutionEnqueuerListener resolutionEnqueuerListener = list[0]; |
| 95 BackendUsageBuilder backendUsageBuilder = list[1]; | 95 BackendUsageBuilder backendUsageBuilder = list[1]; |
| 96 InterceptorDataBuilder interceptorDataBuilder = list[2]; |
| 96 ResolutionEnqueuer enqueuer = new ResolutionEnqueuer( | 97 ResolutionEnqueuer enqueuer = new ResolutionEnqueuer( |
| 97 compiler.enqueuer, | 98 compiler.enqueuer, |
| 98 compiler.options, | 99 compiler.options, |
| 99 compiler.reporter, | 100 compiler.reporter, |
| 100 const TreeShakingEnqueuerStrategy(), | 101 const TreeShakingEnqueuerStrategy(), |
| 101 resolutionEnqueuerListener, | 102 resolutionEnqueuerListener, |
| 102 new ElementResolutionWorldBuilder( | 103 new ElementResolutionWorldBuilder( |
| 103 backend, | 104 backend, |
| 104 compiler.resolution, | 105 compiler.resolution, |
| 105 backend.nativeBasicData, | 106 backend.nativeBasicData, |
| 106 backend.nativeDataBuilder, | 107 backend.nativeDataBuilder, |
| 108 interceptorDataBuilder, |
| 107 const OpenWorldStrategy()), | 109 const OpenWorldStrategy()), |
| 108 new KernelWorkItemBuilder(compiler), | 110 new KernelWorkItemBuilder(compiler), |
| 109 'enqueuer from kernel'); | 111 'enqueuer from kernel'); |
| 110 ClosedWorld closedWorld = computeClosedWorld( | 112 ClosedWorld closedWorld = computeClosedWorld( |
| 111 compiler.reporter, enqueuer, compiler.elementEnvironment); | 113 compiler.reporter, enqueuer, compiler.elementEnvironment); |
| 112 BackendUsage backendUsage = backendUsageBuilder.close(); | 114 BackendUsage backendUsage = backendUsageBuilder.close(); |
| 113 checkResolutionEnqueuers( | 115 checkResolutionEnqueuers( |
| 114 backendUsage, backendUsage, compiler.enqueuer.resolution, enqueuer, | 116 backendUsage, backendUsage, compiler.enqueuer.resolution, enqueuer, |
| 115 typeEquivalence: (ResolutionDartType a, ResolutionDartType b) { | 117 typeEquivalence: (ResolutionDartType a, ResolutionDartType b) { |
| 116 return areTypesEquivalent(unalias(a), unalias(b)); | 118 return areTypesEquivalent(unalias(a), unalias(b)); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 135 // The class cannot itself be instantiated. | 137 // The class cannot itself be instantiated. |
| 136 return false; | 138 return false; |
| 137 } | 139 } |
| 138 return true; | 140 return true; |
| 139 } | 141 } |
| 140 | 142 |
| 141 List createResolutionEnqueuerListener(Compiler compiler) { | 143 List createResolutionEnqueuerListener(Compiler compiler) { |
| 142 JavaScriptBackend backend = compiler.backend; | 144 JavaScriptBackend backend = compiler.backend; |
| 143 BackendUsageBuilder backendUsageBuilder = | 145 BackendUsageBuilder backendUsageBuilder = |
| 144 new BackendUsageBuilderImpl(compiler.commonElements); | 146 new BackendUsageBuilderImpl(compiler.commonElements); |
| 147 InterceptorDataBuilder interceptorDataBuilder = |
| 148 new InterceptorDataBuilderImpl(backend.nativeBasicData, |
| 149 compiler.elementEnvironment, compiler.commonElements); |
| 145 ResolutionEnqueuerListener listener = new ResolutionEnqueuerListener( | 150 ResolutionEnqueuerListener listener = new ResolutionEnqueuerListener( |
| 146 compiler.options, | 151 compiler.options, |
| 147 compiler.elementEnvironment, | 152 compiler.elementEnvironment, |
| 148 compiler.commonElements, | 153 compiler.commonElements, |
| 149 backend.impacts, | 154 backend.impacts, |
| 150 backend.nativeBasicData, | 155 backend.nativeBasicData, |
| 151 new InterceptorDataBuilderImpl(backend.nativeBasicData, | 156 interceptorDataBuilder, |
| 152 compiler.elementEnvironment, compiler.commonElements), | |
| 153 backendUsageBuilder, | 157 backendUsageBuilder, |
| 154 backend.rtiNeedBuilder, | 158 backend.rtiNeedBuilder, |
| 155 backend.mirrorsDataBuilder, | 159 backend.mirrorsDataBuilder, |
| 156 backend.noSuchMethodRegistry, | 160 backend.noSuchMethodRegistry, |
| 157 backend.customElementsResolutionAnalysis, | 161 backend.customElementsResolutionAnalysis, |
| 158 backend.lookupMapResolutionAnalysis, | 162 backend.lookupMapResolutionAnalysis, |
| 159 backend.mirrorsResolutionAnalysis, | 163 backend.mirrorsResolutionAnalysis, |
| 160 new TypeVariableResolutionAnalysis( | 164 new TypeVariableResolutionAnalysis( |
| 161 compiler.elementEnvironment, backend.impacts, backendUsageBuilder), | 165 compiler.elementEnvironment, backend.impacts, backendUsageBuilder), |
| 162 backend.nativeResolutionEnqueuerForTesting, | 166 backend.nativeResolutionEnqueuerForTesting, |
| 163 compiler.deferredLoadTask, | 167 compiler.deferredLoadTask, |
| 164 backend.kernelTask); | 168 backend.kernelTask); |
| 165 return [listener, backendUsageBuilder]; | 169 return [listener, backendUsageBuilder, interceptorDataBuilder]; |
| 166 } | 170 } |
| 167 | 171 |
| 168 ClosedWorld computeClosedWorld(DiagnosticReporter reporter, | 172 ClosedWorld computeClosedWorld(DiagnosticReporter reporter, |
| 169 ResolutionEnqueuer enqueuer, ElementEnvironment elementEnvironment) { | 173 ResolutionEnqueuer enqueuer, ElementEnvironment elementEnvironment) { |
| 170 enqueuer.open(const ImpactStrategy(), elementEnvironment.mainFunction, | 174 enqueuer.open(const ImpactStrategy(), elementEnvironment.mainFunction, |
| 171 elementEnvironment.libraries); | 175 elementEnvironment.libraries); |
| 172 enqueuer.forEach((WorkItem work) { | 176 enqueuer.forEach((WorkItem work) { |
| 173 enqueuer.applyImpact(work.run(), impactSource: work.element); | 177 enqueuer.applyImpact(work.run(), impactSource: work.element); |
| 174 }); | 178 }); |
| 175 return enqueuer.worldBuilder.closeWorld(); | 179 return enqueuer.worldBuilder.closeWorld(); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 193 final MemberElement element; | 197 final MemberElement element; |
| 194 | 198 |
| 195 KernelWorkItem(this._compiler, this._impactTransformer, this.element); | 199 KernelWorkItem(this._compiler, this._impactTransformer, this.element); |
| 196 | 200 |
| 197 @override | 201 @override |
| 198 WorldImpact run() { | 202 WorldImpact run() { |
| 199 ResolutionImpact resolutionImpact = build(_compiler, element.resolvedAst); | 203 ResolutionImpact resolutionImpact = build(_compiler, element.resolvedAst); |
| 200 return _impactTransformer.transformResolutionImpact(resolutionImpact); | 204 return _impactTransformer.transformResolutionImpact(resolutionImpact); |
| 201 } | 205 } |
| 202 } | 206 } |
| OLD | NEW |