Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: tests/compiler/dart2js/kernel/closed_world_test.dart

Issue 2828873002: Revert "Remove JavaScriptBackend from ClosedWorldBase" (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/closure.dart'; 10 import 'package:compiler/src/closure.dart';
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 entryPoint: entryPoint, 93 entryPoint: entryPoint,
94 memorySourceFiles: memorySourceFiles, 94 memorySourceFiles: memorySourceFiles,
95 options: [ 95 options: [
96 Flags.analyzeOnly, 96 Flags.analyzeOnly,
97 Flags.useKernel, 97 Flags.useKernel,
98 Flags.enableAssertMessage 98 Flags.enableAssertMessage
99 ]); 99 ]);
100 ElementResolutionWorldBuilder.useInstantiationMap = true; 100 ElementResolutionWorldBuilder.useInstantiationMap = true;
101 compiler.resolution.retainCachesForTesting = true; 101 compiler.resolution.retainCachesForTesting = true;
102 await compiler.run(entryPoint); 102 await compiler.run(entryPoint);
103 compiler.resolutionWorldBuilder.closeWorld(); 103 compiler.resolutionWorldBuilder.closeWorld(compiler.reporter);
104 104
105 JavaScriptBackend backend = compiler.backend; 105 JavaScriptBackend backend = compiler.backend;
106 // Create a new resolution enqueuer and feed it with the [WorldImpact]s 106 // Create a new resolution enqueuer and feed it with the [WorldImpact]s
107 // computed from kernel through the [build] in `kernel_impact.dart`. 107 // computed from kernel through the [build] in `kernel_impact.dart`.
108 List list = createResolutionEnqueuerListener(compiler);
109 ResolutionEnqueuerListener resolutionEnqueuerListener = list[0];
110 BackendUsageBuilder backendUsageBuilder = list[1];
111 ResolutionEnqueuer enqueuer = new ResolutionEnqueuer( 108 ResolutionEnqueuer enqueuer = new ResolutionEnqueuer(
112 compiler.enqueuer, 109 compiler.enqueuer,
113 compiler.options, 110 compiler.options,
114 compiler.reporter, 111 compiler.reporter,
115 const TreeShakingEnqueuerStrategy(), 112 const TreeShakingEnqueuerStrategy(),
116 resolutionEnqueuerListener, 113 createResolutionEnqueuerListener(compiler),
117 new ElementResolutionWorldBuilder( 114 new ElementResolutionWorldBuilder(
118 backend, compiler.resolution, const OpenWorldStrategy()), 115 backend, compiler.resolution, const OpenWorldStrategy()),
119 new KernelWorkItemBuilder(compiler), 116 new KernelWorkItemBuilder(compiler),
120 'enqueuer from kernel'); 117 'enqueuer from kernel');
121 ClosedWorld closedWorld = computeClosedWorld( 118 ClosedWorld closedWorld = computeClosedWorld(
122 compiler.reporter, enqueuer, compiler.elementEnvironment); 119 compiler.reporter, enqueuer, compiler.elementEnvironment);
123 BackendUsage backendUsage = backendUsageBuilder.close(); 120 BackendUsage backendUsage = compiler.backend.backendUsageBuilder.close();
124 checkResolutionEnqueuers( 121 checkResolutionEnqueuers(
125 backendUsage, backendUsage, compiler.enqueuer.resolution, enqueuer, 122 backendUsage, backendUsage, compiler.enqueuer.resolution, enqueuer,
126 typeEquivalence: (ResolutionDartType a, ResolutionDartType b) { 123 typeEquivalence: (ResolutionDartType a, ResolutionDartType b) {
127 return areTypesEquivalent(unalias(a), unalias(b)); 124 return areTypesEquivalent(unalias(a), unalias(b));
128 }, elementFilter: (Element element) { 125 }, elementFilter: (Element element) {
129 if (element is ConstructorElement && element.isRedirectingFactory) { 126 if (element is ConstructorElement && element.isRedirectingFactory) {
130 // Redirecting factory constructors are skipped in kernel. 127 // Redirecting factory constructors are skipped in kernel.
131 return false; 128 return false;
132 } 129 }
133 if (element is ClassElement) { 130 if (element is ClassElement) {
134 for (ConstructorElement constructor in element.constructors) { 131 for (ConstructorElement constructor in element.constructors) {
135 if (!constructor.isRedirectingFactory) { 132 if (!constructor.isRedirectingFactory) {
136 return true; 133 return true;
137 } 134 }
138 } 135 }
139 // The class cannot itself be instantiated. 136 // The class cannot itself be instantiated.
140 return false; 137 return false;
141 } 138 }
142 return true; 139 return true;
143 }, verbose: arguments.verbose); 140 }, verbose: arguments.verbose);
144 checkClosedWorlds( 141 checkClosedWorlds(
145 compiler.resolutionWorldBuilder.closedWorldForTesting, closedWorld, 142 compiler.resolutionWorldBuilder.closedWorldForTesting, closedWorld,
146 verbose: arguments.verbose); 143 verbose: arguments.verbose);
147 }); 144 });
148 } 145 }
149 146
150 List createResolutionEnqueuerListener(Compiler compiler) { 147 EnqueuerListener createResolutionEnqueuerListener(Compiler compiler) {
151 JavaScriptBackend backend = compiler.backend; 148 JavaScriptBackend backend = compiler.backend;
152 BackendUsageBuilder backendUsageBuilder = 149 return new ResolutionEnqueuerListener(
153 new BackendUsageBuilderImpl(compiler.commonElements);
154 ResolutionEnqueuerListener listener = new ResolutionEnqueuerListener(
155 compiler.options, 150 compiler.options,
156 compiler.elementEnvironment, 151 compiler.elementEnvironment,
157 compiler.commonElements, 152 compiler.commonElements,
158 backend.impacts, 153 backend.impacts,
159 backend.nativeBasicData, 154 backend.nativeBasicData,
160 new InterceptorDataBuilderImpl(backend.nativeBasicData, 155 backend.interceptorDataBuilder,
161 compiler.elementEnvironment, compiler.commonElements), 156 backend.backendUsageBuilder,
162 backendUsageBuilder,
163 backend.rtiNeedBuilder, 157 backend.rtiNeedBuilder,
164 backend.mirrorsDataBuilder, 158 backend.mirrorsDataBuilder,
165 backend.noSuchMethodRegistry, 159 backend.noSuchMethodRegistry,
166 backend.customElementsResolutionAnalysis, 160 backend.customElementsResolutionAnalysis,
167 backend.lookupMapResolutionAnalysis, 161 backend.lookupMapResolutionAnalysis,
168 backend.mirrorsResolutionAnalysis, 162 backend.mirrorsResolutionAnalysis,
169 new TypeVariableResolutionAnalysis( 163 new TypeVariableResolutionAnalysis(compiler.elementEnvironment,
170 compiler.elementEnvironment, backend.impacts, backendUsageBuilder), 164 backend.impacts, backend.backendUsageBuilder),
171 backend.nativeResolutionEnqueuer, 165 backend.nativeResolutionEnqueuer,
172 compiler.deferredLoadTask, 166 compiler.deferredLoadTask,
173 backend.kernelTask); 167 backend.kernelTask);
174 return [listener, backendUsageBuilder];
175 } 168 }
176 169
177 ClosedWorld computeClosedWorld(DiagnosticReporter reporter, 170 ClosedWorld computeClosedWorld(DiagnosticReporter reporter,
178 ResolutionEnqueuer enqueuer, ElementEnvironment elementEnvironment) { 171 ResolutionEnqueuer enqueuer, ElementEnvironment elementEnvironment) {
179 enqueuer.open(const ImpactStrategy(), elementEnvironment.mainFunction, 172 enqueuer.open(const ImpactStrategy(), elementEnvironment.mainFunction,
180 elementEnvironment.libraries); 173 elementEnvironment.libraries);
181 enqueuer.forEach((WorkItem work) { 174 enqueuer.forEach((WorkItem work) {
182 enqueuer.applyImpact(work.run(), impactSource: work.element); 175 enqueuer.applyImpact(work.run(), impactSource: work.element);
183 }); 176 });
184 return enqueuer.worldBuilder.closeWorld(); 177 return enqueuer.worldBuilder.closeWorld(reporter);
185 } 178 }
186 179
187 class KernelWorkItemBuilder implements WorkItemBuilder { 180 class KernelWorkItemBuilder implements WorkItemBuilder {
188 final Compiler _compiler; 181 final Compiler _compiler;
189 182
190 KernelWorkItemBuilder(this._compiler); 183 KernelWorkItemBuilder(this._compiler);
191 184
192 @override 185 @override
193 WorkItem createWorkItem(MemberEntity entity) { 186 WorkItem createWorkItem(MemberEntity entity) {
194 return new KernelWorkItem( 187 return new KernelWorkItem(
195 _compiler, _compiler.backend.impactTransformer, entity); 188 _compiler, _compiler.backend.impactTransformer, entity);
196 } 189 }
197 } 190 }
198 191
199 class KernelWorkItem implements ResolutionWorkItem { 192 class KernelWorkItem implements ResolutionWorkItem {
200 final Compiler _compiler; 193 final Compiler _compiler;
201 final ImpactTransformer _impactTransformer; 194 final ImpactTransformer _impactTransformer;
202 final MemberElement element; 195 final MemberElement element;
203 196
204 KernelWorkItem(this._compiler, this._impactTransformer, this.element); 197 KernelWorkItem(this._compiler, this._impactTransformer, this.element);
205 198
206 @override 199 @override
207 WorldImpact run() { 200 WorldImpact run() {
208 ResolutionImpact resolutionImpact = build(_compiler, element.resolvedAst); 201 ResolutionImpact resolutionImpact = build(_compiler, element.resolvedAst);
209 return _impactTransformer.transformResolutionImpact(resolutionImpact); 202 return _impactTransformer.transformResolutionImpact(resolutionImpact);
210 } 203 }
211 } 204 }
OLDNEW
« no previous file with comments | « tests/compiler/dart2js/kernel/closed_world2_test.dart ('k') | tests/compiler/dart2js/type_combination_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698