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

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

Issue 2827283002: Implement subtype relation for kernel based elements. (Closed)
Patch Set: Updated cf. comments 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) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 // Partial test that the closed world computed from [WorldImpact]s derived from 5 // Partial test that the closed world computed from [WorldImpact]s derived from
6 // kernel is equivalent to the original computed from resolution. 6 // kernel is equivalent to the original computed from resolution.
7 library dart2js.kernel.closed_world2_test; 7 library dart2js.kernel.closed_world2_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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 if (arguments.uri != null) { 61 if (arguments.uri != null) {
62 entryPoint = arguments.uri; 62 entryPoint = arguments.uri;
63 memorySourceFiles = const <String, String>{}; 63 memorySourceFiles = const <String, String>{};
64 } else { 64 } else {
65 entryPoint = Uri.parse('memory:main.dart'); 65 entryPoint = Uri.parse('memory:main.dart');
66 memorySourceFiles = SOURCE; 66 memorySourceFiles = SOURCE;
67 } 67 }
68 68
69 asyncTest(() async { 69 asyncTest(() async {
70 enableDebugMode(); 70 enableDebugMode();
71
72 print('---- analyze-only ------------------------------------------------');
73 Compiler compiler1 = compilerFor(
74 entryPoint: entryPoint,
75 memorySourceFiles: memorySourceFiles,
76 options: [Flags.analyzeOnly, Flags.enableAssertMessage]);
77 ElementResolutionWorldBuilder.useInstantiationMap = true;
78 compiler1.resolution.retainCachesForTesting = true;
79 await compiler1.run(entryPoint);
80 ResolutionEnqueuer enqueuer1 = compiler1.enqueuer.resolution;
81 BackendUsage backendUsage1 = compiler1.backend.backendUsage;
82 compiler1.resolutionWorldBuilder.closeWorld();
83
84 print('---- analyze-all -------------------------------------------------');
71 Compiler compiler = compilerFor( 85 Compiler compiler = compilerFor(
72 entryPoint: entryPoint, 86 entryPoint: entryPoint,
73 memorySourceFiles: memorySourceFiles, 87 memorySourceFiles: memorySourceFiles,
74 options: [ 88 options: [
75 Flags.analyzeAll, 89 Flags.analyzeAll,
76 Flags.useKernel, 90 Flags.useKernel,
77 Flags.enableAssertMessage 91 Flags.enableAssertMessage
78 ]); 92 ]);
79 ElementResolutionWorldBuilder.useInstantiationMap = true;
80 compiler.resolution.retainCachesForTesting = true;
81 await compiler.run(entryPoint); 93 await compiler.run(entryPoint);
82 compiler.resolutionWorldBuilder.closeWorld(); 94 compiler.resolutionWorldBuilder.closeWorld();
83 95
96 print('---- closed world from kernel ------------------------------------');
84 KernelWorldBuilder worldBuilder = new KernelWorldBuilder( 97 KernelWorldBuilder worldBuilder = new KernelWorldBuilder(
85 compiler.reporter, compiler.backend.kernelTask.program); 98 compiler.reporter, compiler.backend.kernelTask.program);
86 KernelEquivalence equivalence = new KernelEquivalence(worldBuilder); 99 KernelEquivalence equivalence = new KernelEquivalence(worldBuilder);
87 NativeBasicData nativeBasicData = computeNativeBasicData(worldBuilder); 100 NativeBasicData nativeBasicData = computeNativeBasicData(worldBuilder);
88 checkNativeBasicData( 101 checkNativeBasicData(
89 compiler.backend.nativeBasicData, nativeBasicData, equivalence); 102 compiler.backend.nativeBasicData, nativeBasicData, equivalence);
90 List list = createKernelResolutionEnqueuerListener( 103 List list = createKernelResolutionEnqueuerListener(
91 compiler.options, 104 compiler.options,
92 compiler.reporter, 105 compiler.reporter,
93 compiler.deferredLoadTask, 106 compiler.deferredLoadTask,
94 worldBuilder, 107 worldBuilder,
95 nativeBasicData); 108 nativeBasicData);
96 ResolutionEnqueuerListener resolutionEnqueuerListener = list[0]; 109 ResolutionEnqueuerListener resolutionEnqueuerListener = list[0];
97 ImpactTransformer impactTransformer = list[1]; 110 BackendUsageBuilder backendUsageBuilder2 = list[1];
98 ResolutionEnqueuer enqueuer = new ResolutionEnqueuer( 111 ImpactTransformer impactTransformer = list[2];
112 ResolutionEnqueuer enqueuer2 = new ResolutionEnqueuer(
99 compiler.enqueuer, 113 compiler.enqueuer,
100 compiler.options, 114 compiler.options,
101 compiler.reporter, 115 compiler.reporter,
102 const TreeShakingEnqueuerStrategy(), 116 const TreeShakingEnqueuerStrategy(),
103 resolutionEnqueuerListener, 117 resolutionEnqueuerListener,
104 new KernelResolutionWorldBuilder( 118 new KernelResolutionWorldBuilder(
105 worldBuilder.elementEnvironment, 119 worldBuilder.elementEnvironment,
106 worldBuilder.commonElements, 120 worldBuilder.commonElements,
107 nativeBasicData, 121 nativeBasicData,
108 const OpenWorldStrategy()), 122 const OpenWorldStrategy()),
109 new KernelWorkItemBuilder(worldBuilder, impactTransformer), 123 new KernelWorkItemBuilder(worldBuilder, impactTransformer),
110 'enqueuer from kelements'); 124 'enqueuer from kelements');
111
112 computeClosedWorld( 125 computeClosedWorld(
113 compiler.reporter, enqueuer, worldBuilder.elementEnvironment); 126 compiler.reporter, enqueuer2, worldBuilder.elementEnvironment);
127 BackendUsage backendUsage2 = backendUsageBuilder2.close();
128 checkBackendUsage(backendUsage1, backendUsage2, equivalence);
114 }); 129 });
115 } 130 }
116 131
117 List createKernelResolutionEnqueuerListener( 132 List createKernelResolutionEnqueuerListener(
118 CompilerOptions options, 133 CompilerOptions options,
119 DiagnosticReporter reporter, 134 DiagnosticReporter reporter,
120 DeferredLoadTask deferredLoadTask, 135 DeferredLoadTask deferredLoadTask,
121 KernelWorldBuilder worldBuilder, 136 KernelWorldBuilder worldBuilder,
122 NativeBasicData nativeBasicData) { 137 NativeBasicData nativeBasicData) {
123 ElementEnvironment elementEnvironment = worldBuilder.elementEnvironment; 138 ElementEnvironment elementEnvironment = worldBuilder.elementEnvironment;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 options, 183 options,
169 elementEnvironment, 184 elementEnvironment,
170 commonElements, 185 commonElements,
171 impacts, 186 impacts,
172 nativeBasicData, 187 nativeBasicData,
173 nativeResolutionEnqueuer, 188 nativeResolutionEnqueuer,
174 backendUsageBuilder, 189 backendUsageBuilder,
175 mirrorsDataBuilder, 190 mirrorsDataBuilder,
176 customElementsResolutionAnalysis, 191 customElementsResolutionAnalysis,
177 rtiNeedBuilder); 192 rtiNeedBuilder);
178 return [listener, transformer]; 193 return [listener, backendUsageBuilder, transformer];
179 } 194 }
180 195
181 class RuntimeTypesNeedBuilderImpl implements RuntimeTypesNeedBuilder { 196 class RuntimeTypesNeedBuilderImpl implements RuntimeTypesNeedBuilder {
182 @override 197 @override
183 void registerClassUsingTypeVariableExpression(ClassEntity cls) {} 198 void registerClassUsingTypeVariableExpression(ClassEntity cls) {}
184 199
185 @override 200 @override
186 RuntimeTypesNeed computeRuntimeTypesNeed( 201 RuntimeTypesNeed computeRuntimeTypesNeed(
187 ResolutionWorldBuilder resolutionWorldBuilder, 202 ResolutionWorldBuilder resolutionWorldBuilder,
188 ClosedWorld closedWorld, 203 ClosedWorld closedWorld,
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 void checkNativeBasicData(NativeBasicDataImpl data1, NativeBasicDataImpl data2, 300 void checkNativeBasicData(NativeBasicDataImpl data1, NativeBasicDataImpl data2,
286 KernelEquivalence equivalence) { 301 KernelEquivalence equivalence) {
287 checkMapEquivalence( 302 checkMapEquivalence(
288 data1, 303 data1,
289 data2, 304 data2,
290 'nativeClassTagInfo', 305 'nativeClassTagInfo',
291 data1.nativeClassTagInfo, 306 data1.nativeClassTagInfo,
292 data2.nativeClassTagInfo, 307 data2.nativeClassTagInfo,
293 equivalence.entityEquivalence, 308 equivalence.entityEquivalence,
294 (a, b) => a == b); 309 (a, b) => a == b);
310 // TODO(johnniwinther): Check the remaining properties.
295 } 311 }
312
313 void checkBackendUsage(BackendUsageImpl usage1, BackendUsageImpl usage2,
314 KernelEquivalence equivalence) {
315 checkSetEquivalence(
316 usage1,
317 usage2,
318 'globalClassDependencies',
319 usage1.globalClassDependencies,
320 usage2.globalClassDependencies,
321 equivalence.entityEquivalence);
322 checkSetEquivalence(
323 usage1,
324 usage2,
325 'globalFunctionDependencies',
326 usage1.globalFunctionDependencies,
327 usage2.globalFunctionDependencies,
328 equivalence.entityEquivalence);
329 checkSetEquivalence(
330 usage1,
331 usage2,
332 'helperClassesUsed',
333 usage1.helperClassesUsed,
334 usage2.helperClassesUsed,
335 equivalence.entityEquivalence);
336 checkSetEquivalence(
337 usage1,
338 usage2,
339 'helperFunctionsUsed',
340 usage1.helperFunctionsUsed,
341 usage2.helperFunctionsUsed,
342 equivalence.entityEquivalence);
343 check(
344 usage1,
345 usage2,
346 'needToInitializeIsolateAffinityTag',
347 usage1.needToInitializeIsolateAffinityTag,
348 usage2.needToInitializeIsolateAffinityTag);
349 check(
350 usage1,
351 usage2,
352 'needToInitializeDispatchProperty',
353 usage1.needToInitializeDispatchProperty,
354 usage2.needToInitializeDispatchProperty);
355 check(usage1, usage2, 'requiresPreamble', usage1.requiresPreamble,
356 usage2.requiresPreamble);
357 check(usage1, usage2, 'isInvokeOnUsed', usage1.isInvokeOnUsed,
358 usage2.isInvokeOnUsed);
359 check(usage1, usage2, 'isRuntimeTypeUsed', usage1.isRuntimeTypeUsed,
360 usage2.isRuntimeTypeUsed);
361 check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse,
362 usage2.isIsolateInUse);
363 check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed,
364 usage2.isFunctionApplyUsed);
365 check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed,
366 usage2.isNoSuchMethodUsed);
367 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/universe/world_builder.dart ('k') | tests/compiler/dart2js/kernel/closed_world_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698