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

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

Issue 2826673002: Remove JavaScriptBackend from ClosedWorldBase (Closed)
Patch Set: Fix 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(compiler.reporter); 103 compiler.resolutionWorldBuilder.closeWorld();
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];
108 ResolutionEnqueuer enqueuer = new ResolutionEnqueuer( 111 ResolutionEnqueuer enqueuer = new ResolutionEnqueuer(
109 compiler.enqueuer, 112 compiler.enqueuer,
110 compiler.options, 113 compiler.options,
111 compiler.reporter, 114 compiler.reporter,
112 const TreeShakingEnqueuerStrategy(), 115 const TreeShakingEnqueuerStrategy(),
113 createResolutionEnqueuerListener(compiler), 116 resolutionEnqueuerListener,
114 new ElementResolutionWorldBuilder( 117 new ElementResolutionWorldBuilder(
115 backend, compiler.resolution, const OpenWorldStrategy()), 118 backend, compiler.resolution, const OpenWorldStrategy()),
116 new KernelWorkItemBuilder(compiler), 119 new KernelWorkItemBuilder(compiler),
117 'enqueuer from kernel'); 120 'enqueuer from kernel');
118 ClosedWorld closedWorld = computeClosedWorld( 121 ClosedWorld closedWorld = computeClosedWorld(
119 compiler.reporter, enqueuer, compiler.elementEnvironment); 122 compiler.reporter, enqueuer, compiler.elementEnvironment);
120 BackendUsage backendUsage = compiler.backend.backendUsageBuilder.close(); 123 BackendUsage backendUsage = backendUsageBuilder.close();
121 checkResolutionEnqueuers( 124 checkResolutionEnqueuers(
122 backendUsage, backendUsage, compiler.enqueuer.resolution, enqueuer, 125 backendUsage, backendUsage, compiler.enqueuer.resolution, enqueuer,
123 typeEquivalence: (ResolutionDartType a, ResolutionDartType b) { 126 typeEquivalence: (ResolutionDartType a, ResolutionDartType b) {
124 return areTypesEquivalent(unalias(a), unalias(b)); 127 return areTypesEquivalent(unalias(a), unalias(b));
125 }, elementFilter: (Element element) { 128 }, elementFilter: (Element element) {
126 if (element is ConstructorElement && element.isRedirectingFactory) { 129 if (element is ConstructorElement && element.isRedirectingFactory) {
127 // Redirecting factory constructors are skipped in kernel. 130 // Redirecting factory constructors are skipped in kernel.
128 return false; 131 return false;
129 } 132 }
130 if (element is ClassElement) { 133 if (element is ClassElement) {
131 for (ConstructorElement constructor in element.constructors) { 134 for (ConstructorElement constructor in element.constructors) {
132 if (!constructor.isRedirectingFactory) { 135 if (!constructor.isRedirectingFactory) {
133 return true; 136 return true;
134 } 137 }
135 } 138 }
136 // The class cannot itself be instantiated. 139 // The class cannot itself be instantiated.
137 return false; 140 return false;
138 } 141 }
139 return true; 142 return true;
140 }, verbose: arguments.verbose); 143 }, verbose: arguments.verbose);
141 checkClosedWorlds( 144 checkClosedWorlds(
142 compiler.resolutionWorldBuilder.closedWorldForTesting, closedWorld, 145 compiler.resolutionWorldBuilder.closedWorldForTesting, closedWorld,
143 verbose: arguments.verbose); 146 verbose: arguments.verbose);
144 }); 147 });
145 } 148 }
146 149
147 EnqueuerListener createResolutionEnqueuerListener(Compiler compiler) { 150 List createResolutionEnqueuerListener(Compiler compiler) {
148 JavaScriptBackend backend = compiler.backend; 151 JavaScriptBackend backend = compiler.backend;
149 return new ResolutionEnqueuerListener( 152 BackendUsageBuilder backendUsageBuilder =
153 new BackendUsageBuilderImpl(compiler.commonElements);
154 ResolutionEnqueuerListener listener = new ResolutionEnqueuerListener(
150 compiler.options, 155 compiler.options,
151 compiler.elementEnvironment, 156 compiler.elementEnvironment,
152 compiler.commonElements, 157 compiler.commonElements,
153 backend.impacts, 158 backend.impacts,
154 backend.nativeBasicData, 159 backend.nativeBasicData,
155 backend.interceptorDataBuilder, 160 new InterceptorDataBuilderImpl(backend.nativeBasicData,
156 backend.backendUsageBuilder, 161 compiler.elementEnvironment, compiler.commonElements),
162 backendUsageBuilder,
157 backend.rtiNeedBuilder, 163 backend.rtiNeedBuilder,
158 backend.mirrorsDataBuilder, 164 backend.mirrorsDataBuilder,
159 backend.noSuchMethodRegistry, 165 backend.noSuchMethodRegistry,
160 backend.customElementsResolutionAnalysis, 166 backend.customElementsResolutionAnalysis,
161 backend.lookupMapResolutionAnalysis, 167 backend.lookupMapResolutionAnalysis,
162 backend.mirrorsResolutionAnalysis, 168 backend.mirrorsResolutionAnalysis,
163 new TypeVariableResolutionAnalysis(compiler.elementEnvironment, 169 new TypeVariableResolutionAnalysis(
164 backend.impacts, backend.backendUsageBuilder), 170 compiler.elementEnvironment, backend.impacts, backendUsageBuilder),
165 backend.nativeResolutionEnqueuer, 171 backend.nativeResolutionEnqueuer,
166 compiler.deferredLoadTask, 172 compiler.deferredLoadTask,
167 backend.kernelTask); 173 backend.kernelTask);
174 return [listener, backendUsageBuilder];
168 } 175 }
169 176
170 ClosedWorld computeClosedWorld(DiagnosticReporter reporter, 177 ClosedWorld computeClosedWorld(DiagnosticReporter reporter,
171 ResolutionEnqueuer enqueuer, ElementEnvironment elementEnvironment) { 178 ResolutionEnqueuer enqueuer, ElementEnvironment elementEnvironment) {
172 enqueuer.open(const ImpactStrategy(), elementEnvironment.mainFunction, 179 enqueuer.open(const ImpactStrategy(), elementEnvironment.mainFunction,
173 elementEnvironment.libraries); 180 elementEnvironment.libraries);
174 enqueuer.forEach((WorkItem work) { 181 enqueuer.forEach((WorkItem work) {
175 enqueuer.applyImpact(work.run(), impactSource: work.element); 182 enqueuer.applyImpact(work.run(), impactSource: work.element);
176 }); 183 });
177 return enqueuer.worldBuilder.closeWorld(reporter); 184 return enqueuer.worldBuilder.closeWorld();
178 } 185 }
179 186
180 class KernelWorkItemBuilder implements WorkItemBuilder { 187 class KernelWorkItemBuilder implements WorkItemBuilder {
181 final Compiler _compiler; 188 final Compiler _compiler;
182 189
183 KernelWorkItemBuilder(this._compiler); 190 KernelWorkItemBuilder(this._compiler);
184 191
185 @override 192 @override
186 WorkItem createWorkItem(MemberEntity entity) { 193 WorkItem createWorkItem(MemberEntity entity) {
187 return new KernelWorkItem( 194 return new KernelWorkItem(
188 _compiler, _compiler.backend.impactTransformer, entity); 195 _compiler, _compiler.backend.impactTransformer, entity);
189 } 196 }
190 } 197 }
191 198
192 class KernelWorkItem implements ResolutionWorkItem { 199 class KernelWorkItem implements ResolutionWorkItem {
193 final Compiler _compiler; 200 final Compiler _compiler;
194 final ImpactTransformer _impactTransformer; 201 final ImpactTransformer _impactTransformer;
195 final MemberElement element; 202 final MemberElement element;
196 203
197 KernelWorkItem(this._compiler, this._impactTransformer, this.element); 204 KernelWorkItem(this._compiler, this._impactTransformer, this.element);
198 205
199 @override 206 @override
200 WorldImpact run() { 207 WorldImpact run() {
201 ResolutionImpact resolutionImpact = build(_compiler, element.resolvedAst); 208 ResolutionImpact resolutionImpact = build(_compiler, element.resolvedAst);
202 return _impactTransformer.transformResolutionImpact(resolutionImpact); 209 return _impactTransformer.transformResolutionImpact(resolutionImpact);
203 } 210 }
204 } 211 }
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