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

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

Issue 2879593004: Reorganize equivalence test helpers (Closed)
Patch Set: Created 3 years, 7 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/commandline_options.dart'; 10 import 'package:compiler/src/commandline_options.dart';
(...skipping 14 matching lines...) Expand all
25 import 'package:compiler/src/js_backend/type_variable_handler.dart'; 25 import 'package:compiler/src/js_backend/type_variable_handler.dart';
26 import 'package:compiler/src/ssa/kernel_impact.dart'; 26 import 'package:compiler/src/ssa/kernel_impact.dart';
27 import 'package:compiler/src/serialization/equivalence.dart'; 27 import 'package:compiler/src/serialization/equivalence.dart';
28 import 'package:compiler/src/universe/world_builder.dart'; 28 import 'package:compiler/src/universe/world_builder.dart';
29 import 'package:compiler/src/universe/world_impact.dart'; 29 import 'package:compiler/src/universe/world_impact.dart';
30 import 'package:compiler/src/world.dart'; 30 import 'package:compiler/src/world.dart';
31 import 'impact_test.dart'; 31 import 'impact_test.dart';
32 import '../memory_compiler.dart'; 32 import '../memory_compiler.dart';
33 import '../serialization/helper.dart'; 33 import '../serialization/helper.dart';
34 import '../serialization/model_test_helper.dart'; 34 import '../serialization/model_test_helper.dart';
35 import '../equivalence/check_functions.dart';
36 import 'test_helpers.dart';
35 37
36 const SOURCE = const { 38 const SOURCE = const {
37 'main.dart': ''' 39 'main.dart': '''
38 abstract class A { 40 abstract class A {
39 // redirecting factory in abstract class to other class 41 // redirecting factory in abstract class to other class
40 factory A.a() = D.a; 42 factory A.a() = D.a;
41 // redirecting factory in abstract class to factory in abstract class 43 // redirecting factory in abstract class to factory in abstract class
42 factory A.b() = B.a; 44 factory A.b() = B.a;
43 } 45 }
44 abstract class B implements A { 46 abstract class B implements A {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 compiler.reporter, 102 compiler.reporter,
101 const TreeShakingEnqueuerStrategy(), 103 const TreeShakingEnqueuerStrategy(),
102 resolutionEnqueuerListener, 104 resolutionEnqueuerListener,
103 new ElementResolutionWorldBuilder( 105 new ElementResolutionWorldBuilder(
104 backend, 106 backend,
105 compiler.resolution, 107 compiler.resolution,
106 backend.nativeBasicData, 108 backend.nativeBasicData,
107 backend.nativeDataBuilder, 109 backend.nativeDataBuilder,
108 interceptorDataBuilder, 110 interceptorDataBuilder,
109 const OpenWorldStrategy()), 111 const OpenWorldStrategy()),
110 new KernelWorkItemBuilder(compiler), 112 new KernelTestWorkItemBuilder(compiler),
111 'enqueuer from kernel'); 113 'enqueuer from kernel');
112 ClosedWorld closedWorld = computeClosedWorld( 114 ClosedWorld closedWorld = computeClosedWorld(
113 compiler.reporter, enqueuer, compiler.elementEnvironment); 115 compiler.reporter, enqueuer, compiler.elementEnvironment);
114 BackendUsage backendUsage = backendUsageBuilder.close(); 116 BackendUsage backendUsage = backendUsageBuilder.close();
115 checkResolutionEnqueuers( 117 checkResolutionEnqueuers(
116 backendUsage, backendUsage, compiler.enqueuer.resolution, enqueuer, 118 backendUsage, backendUsage, compiler.enqueuer.resolution, enqueuer,
117 typeEquivalence: (ResolutionDartType a, ResolutionDartType b) { 119 typeEquivalence: (ResolutionDartType a, ResolutionDartType b) {
118 return areTypesEquivalent(unalias(a), unalias(b)); 120 return areTypesEquivalent(unalias(a), unalias(b));
119 }, elementFilter: elementFilter, verbose: arguments.verbose); 121 }, elementFilter: elementFilter, verbose: arguments.verbose);
120 checkClosedWorlds( 122 checkClosedWorlds(
121 compiler.resolutionWorldBuilder.closedWorldForTesting, closedWorld, 123 compiler.resolutionWorldBuilder.closedWorldForTesting, closedWorld,
122 verbose: arguments.verbose); 124 verbose: arguments.verbose);
123 }); 125 });
124 } 126 }
125 127
126 bool elementFilter(Entity element) {
127 if (element is ConstructorElement && element.isRedirectingFactory) {
128 // Redirecting factory constructors are skipped in kernel.
129 return false;
130 }
131 if (element is ClassElement) {
132 for (ConstructorElement constructor in element.constructors) {
133 if (!constructor.isRedirectingFactory) {
134 return true;
135 }
136 }
137 // The class cannot itself be instantiated.
138 return false;
139 }
140 return true;
141 }
142
143 List createResolutionEnqueuerListener(Compiler compiler) { 128 List createResolutionEnqueuerListener(Compiler compiler) {
144 JavaScriptBackend backend = compiler.backend; 129 JavaScriptBackend backend = compiler.backend;
145 BackendUsageBuilder backendUsageBuilder = 130 BackendUsageBuilder backendUsageBuilder =
146 new BackendUsageBuilderImpl(compiler.commonElements); 131 new BackendUsageBuilderImpl(compiler.commonElements);
147 InterceptorDataBuilder interceptorDataBuilder = 132 InterceptorDataBuilder interceptorDataBuilder =
148 new InterceptorDataBuilderImpl(backend.nativeBasicData, 133 new InterceptorDataBuilderImpl(backend.nativeBasicData,
149 compiler.elementEnvironment, compiler.commonElements); 134 compiler.elementEnvironment, compiler.commonElements);
150 ResolutionEnqueuerListener listener = new ResolutionEnqueuerListener( 135 ResolutionEnqueuerListener listener = new ResolutionEnqueuerListener(
151 compiler.options, 136 compiler.options,
152 compiler.elementEnvironment, 137 compiler.elementEnvironment,
(...skipping 18 matching lines...) Expand all
171 156
172 ClosedWorld computeClosedWorld(DiagnosticReporter reporter, 157 ClosedWorld computeClosedWorld(DiagnosticReporter reporter,
173 ResolutionEnqueuer enqueuer, ElementEnvironment elementEnvironment) { 158 ResolutionEnqueuer enqueuer, ElementEnvironment elementEnvironment) {
174 enqueuer.open(const ImpactStrategy(), elementEnvironment.mainFunction, 159 enqueuer.open(const ImpactStrategy(), elementEnvironment.mainFunction,
175 elementEnvironment.libraries); 160 elementEnvironment.libraries);
176 enqueuer.forEach((WorkItem work) { 161 enqueuer.forEach((WorkItem work) {
177 enqueuer.applyImpact(work.run(), impactSource: work.element); 162 enqueuer.applyImpact(work.run(), impactSource: work.element);
178 }); 163 });
179 return enqueuer.worldBuilder.closeWorld(); 164 return enqueuer.worldBuilder.closeWorld();
180 } 165 }
181
182 class KernelWorkItemBuilder implements WorkItemBuilder {
183 final Compiler _compiler;
184
185 KernelWorkItemBuilder(this._compiler);
186
187 @override
188 WorkItem createWorkItem(MemberEntity entity) {
189 return new KernelWorkItem(
190 _compiler, _compiler.backend.impactTransformer, entity);
191 }
192 }
193
194 class KernelWorkItem implements ResolutionWorkItem {
195 final Compiler _compiler;
196 final ImpactTransformer _impactTransformer;
197 final MemberElement element;
198
199 KernelWorkItem(this._compiler, this._impactTransformer, this.element);
200
201 @override
202 WorldImpact run() {
203 ResolutionImpact resolutionImpact = build(_compiler, element.resolvedAst);
204 return _impactTransformer.transformResolutionImpact(resolutionImpact);
205 }
206 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698