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

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

Issue 2846433003: Run closed_world2_test using the normal compiler pipeline. (Closed)
Patch Set: Updated cf. comments 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) 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 'dart:async';
10
9 import 'package:async_helper/async_helper.dart'; 11 import 'package:async_helper/async_helper.dart';
10 import 'package:compiler/src/closure.dart';
11 import 'package:compiler/src/commandline_options.dart'; 12 import 'package:compiler/src/commandline_options.dart';
12 import 'package:compiler/src/common.dart'; 13 import 'package:compiler/src/common.dart';
13 import 'package:compiler/src/common_elements.dart'; 14 import 'package:compiler/src/common_elements.dart';
14 import 'package:compiler/src/common/backend_api.dart'; 15 import 'package:compiler/src/common/backend_api.dart';
15 import 'package:compiler/src/common/resolution.dart'; 16 import 'package:compiler/src/common/tasks.dart';
16 import 'package:compiler/src/common/work.dart';
17 import 'package:compiler/src/compiler.dart'; 17 import 'package:compiler/src/compiler.dart';
18 import 'package:compiler/src/deferred_load.dart'; 18 import 'package:compiler/src/deferred_load.dart';
19 import 'package:compiler/src/elements/resolution_types.dart'; 19 import 'package:compiler/src/elements/resolution_types.dart';
20 import 'package:compiler/src/elements/elements.dart';
21 import 'package:compiler/src/elements/entities.dart';
22 import 'package:compiler/src/elements/types.dart'; 20 import 'package:compiler/src/elements/types.dart';
23 import 'package:compiler/src/enqueue.dart'; 21 import 'package:compiler/src/enqueue.dart';
24 import 'package:compiler/src/js_backend/backend.dart' 22 import 'package:compiler/src/js_backend/backend.dart'
25 hide RuntimeTypesNeedBuilderImpl; 23 hide RuntimeTypesNeedBuilderImpl;
26 import 'package:compiler/src/js_backend/backend_impact.dart'; 24 import 'package:compiler/src/js_backend/backend_impact.dart';
27 import 'package:compiler/src/js_backend/backend_usage.dart'; 25 import 'package:compiler/src/js_backend/backend_usage.dart';
28 import 'package:compiler/src/js_backend/custom_elements_analysis.dart'; 26 import 'package:compiler/src/js_backend/custom_elements_analysis.dart';
29 import 'package:compiler/src/js_backend/native_data.dart'; 27 import 'package:compiler/src/js_backend/native_data.dart';
30 import 'package:compiler/src/js_backend/impact_transformer.dart'; 28 import 'package:compiler/src/js_backend/impact_transformer.dart';
31 import 'package:compiler/src/js_backend/interceptor_data.dart'; 29 import 'package:compiler/src/js_backend/interceptor_data.dart';
32 import 'package:compiler/src/js_backend/lookup_map_analysis.dart'; 30 import 'package:compiler/src/js_backend/lookup_map_analysis.dart';
33 import 'package:compiler/src/js_backend/mirrors_analysis.dart' 31 import 'package:compiler/src/js_backend/mirrors_analysis.dart'
34 hide MirrorsResolutionAnalysisImpl; 32 hide MirrorsResolutionAnalysisImpl;
35 import 'package:compiler/src/js_backend/mirrors_data.dart'; 33 import 'package:compiler/src/js_backend/mirrors_data.dart';
36 import 'package:compiler/src/js_backend/no_such_method_registry.dart'; 34 import 'package:compiler/src/js_backend/no_such_method_registry.dart';
37 import 'package:compiler/src/js_backend/resolution_listener.dart'; 35 import 'package:compiler/src/js_backend/resolution_listener.dart';
38 import 'package:compiler/src/js_backend/type_variable_handler.dart'; 36 import 'package:compiler/src/js_backend/type_variable_handler.dart';
39 import 'package:compiler/src/native/enqueue.dart'; 37 import 'package:compiler/src/native/enqueue.dart';
40 import 'package:compiler/src/native/resolver.dart'; 38 import 'package:compiler/src/native/resolver.dart';
41 import 'package:compiler/src/kernel/element_map.dart'; 39 import 'package:compiler/src/kernel/element_map.dart';
42 import 'package:compiler/src/kernel/kernel_strategy.dart'; 40 import 'package:compiler/src/kernel/kernel_strategy.dart';
41 import 'package:compiler/src/library_loader.dart';
43 import 'package:compiler/src/options.dart'; 42 import 'package:compiler/src/options.dart';
44 import 'package:compiler/src/universe/world_builder.dart'; 43 import 'package:compiler/src/universe/world_builder.dart';
45 import 'package:compiler/src/universe/world_impact.dart';
46 import 'package:compiler/src/world.dart'; 44 import 'package:compiler/src/world.dart';
47 import 'package:expect/expect.dart'; 45 import 'package:expect/expect.dart';
46 import 'package:kernel/ast.dart' as ir;
48 import '../memory_compiler.dart'; 47 import '../memory_compiler.dart';
49 import '../serialization/helper.dart'; 48 import '../serialization/helper.dart';
50 import '../serialization/model_test_helper.dart'; 49 import '../serialization/model_test_helper.dart';
51 import '../serialization/test_helper.dart'; 50 import '../serialization/test_helper.dart';
52 51
53 import 'closed_world_test.dart' hide KernelWorkItemBuilder; 52 import 'closed_world_test.dart' hide KernelWorkItemBuilder;
54 import 'impact_test.dart'; 53 import 'impact_test.dart';
55 54
56 const SOURCE = const { 55 const SOURCE = const {
57 'main.dart': ''' 56 'main.dart': '''
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 memorySourceFiles: memorySourceFiles, 98 memorySourceFiles: memorySourceFiles,
100 options: [ 99 options: [
101 Flags.analyzeAll, 100 Flags.analyzeAll,
102 Flags.useKernel, 101 Flags.useKernel,
103 Flags.enableAssertMessage 102 Flags.enableAssertMessage
104 ]); 103 ]);
105 await compiler.run(entryPoint); 104 await compiler.run(entryPoint);
106 compiler.resolutionWorldBuilder.closeWorld(); 105 compiler.resolutionWorldBuilder.closeWorld();
107 106
108 print('---- closed world from kernel ------------------------------------'); 107 print('---- closed world from kernel ------------------------------------');
109 KernelToElementMap elementMap = new KernelToElementMap(compiler.reporter); 108 Compiler compiler2 = compilerFor(
110 elementMap.addProgram(compiler.backend.kernelTask.program); 109 entryPoint: entryPoint,
110 memorySourceFiles: memorySourceFiles,
111 options: [
112 Flags.analyzeOnly,
113 Flags.enableAssertMessage,
114 Flags.loadFromDill
115 ]);
116 ElementResolutionWorldBuilder.useInstantiationMap = true;
117 compiler2.resolution.retainCachesForTesting = true;
118 KernelFrontEndStrategy frontEndStrategy = compiler2.frontEndStrategy;
119 KernelToElementMap elementMap = frontEndStrategy.elementMap;
120 compiler2.libraryLoader = new MemoryDillLibraryLoaderTask(
121 elementMap,
122 compiler2.reporter,
123 compiler2.measurer,
124 compiler.backend.kernelTask.program);
125 await compiler2.run(entryPoint);
126 Expect.isFalse(compiler2.compilationFailed);
127 ResolutionEnqueuer enqueuer2 = compiler2.enqueuer.resolution;
128 BackendUsage backendUsage2 = compiler2.backend.backendUsage;
129 ClosedWorld closedWorld2 = compiler2.resolutionWorldBuilder.closeWorld();
111 KernelEquivalence equivalence = new KernelEquivalence(elementMap); 130 KernelEquivalence equivalence = new KernelEquivalence(elementMap);
112 NativeBasicData nativeBasicData = computeNativeBasicData(elementMap);
113 checkNativeBasicData(
114 compiler1.backend.nativeBasicData, nativeBasicData, equivalence);
115 List list = createKernelResolutionEnqueuerListener(
116 compiler.options,
117 compiler.reporter,
118 compiler.deferredLoadTask,
119 elementMap,
120 nativeBasicData);
121 ResolutionEnqueuerListener resolutionEnqueuerListener = list[0];
122 BackendUsageBuilder backendUsageBuilder2 = list[1];
123 ImpactTransformer impactTransformer = list[2];
124
125 ResolutionEnqueuer enqueuer2 = new ResolutionEnqueuer(
126 compiler.enqueuer,
127 compiler.options,
128 compiler.reporter,
129 const TreeShakingEnqueuerStrategy(),
130 resolutionEnqueuerListener,
131 new KernelResolutionWorldBuilder(
132 elementMap, nativeBasicData, const OpenWorldStrategy()),
133 new KernelWorkItemBuilder(elementMap, impactTransformer),
134 'enqueuer from kelements');
135 ClosedWorld closedWorld2 = computeClosedWorld(
136 compiler.reporter, enqueuer2, elementMap.elementEnvironment);
137 BackendUsage backendUsage2 = backendUsageBuilder2.close();
138 checkBackendUsage(backendUsage1, backendUsage2, equivalence); 131 checkBackendUsage(backendUsage1, backendUsage2, equivalence);
139 132
140 checkResolutionEnqueuers(backendUsage1, backendUsage2, enqueuer1, enqueuer2, 133 checkResolutionEnqueuers(backendUsage1, backendUsage2, enqueuer1, enqueuer2,
141 elementEquivalence: equivalence.entityEquivalence, 134 elementEquivalence: equivalence.entityEquivalence,
142 typeEquivalence: (ResolutionDartType a, DartType b) { 135 typeEquivalence: (ResolutionDartType a, DartType b) {
143 return equivalence.typeEquivalence(unalias(a), b); 136 return equivalence.typeEquivalence(unalias(a), b);
144 }, elementFilter: elementFilter, verbose: arguments.verbose); 137 }, elementFilter: elementFilter, verbose: arguments.verbose);
145 138
146 checkClosedWorlds(closedWorld1, closedWorld2, equivalence.entityEquivalence, 139 checkClosedWorlds(closedWorld1, closedWorld2, equivalence.entityEquivalence,
147 verbose: arguments.verbose); 140 verbose: arguments.verbose);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 impacts, 200 impacts,
208 nativeBasicData, 201 nativeBasicData,
209 nativeResolutionEnqueuer, 202 nativeResolutionEnqueuer,
210 backendUsageBuilder, 203 backendUsageBuilder,
211 mirrorsDataBuilder, 204 mirrorsDataBuilder,
212 customElementsResolutionAnalysis, 205 customElementsResolutionAnalysis,
213 rtiNeedBuilder); 206 rtiNeedBuilder);
214 return [listener, backendUsageBuilder, transformer]; 207 return [listener, backendUsageBuilder, transformer];
215 } 208 }
216 209
217 /// Computes that NativeBasicData for the libraries in [worldBuilder].
218 /// TODO(johnniwinther): Use [KernelAnnotationProcessor] instead.
219 NativeBasicData computeNativeBasicData(KernelToElementMap elementMap) {
220 NativeBasicDataBuilderImpl builder = new NativeBasicDataBuilderImpl();
221 ElementEnvironment elementEnvironment = elementMap.elementEnvironment;
222 for (LibraryEntity library in elementEnvironment.libraries) {
223 if (library.canonicalUri.scheme == 'dart') {
224 new KernelAnnotationProcessor(elementMap)
225 .extractNativeAnnotations(library, builder);
226 }
227 }
228 return builder.close(elementEnvironment);
229 }
230
231 void checkNativeBasicData(NativeBasicDataImpl data1, NativeBasicDataImpl data2, 210 void checkNativeBasicData(NativeBasicDataImpl data1, NativeBasicDataImpl data2,
232 KernelEquivalence equivalence) { 211 KernelEquivalence equivalence) {
233 checkMapEquivalence( 212 checkMapEquivalence(
234 data1, 213 data1,
235 data2, 214 data2,
236 'nativeClassTagInfo', 215 'nativeClassTagInfo',
237 data1.nativeClassTagInfo, 216 data1.nativeClassTagInfo,
238 data2.nativeClassTagInfo, 217 data2.nativeClassTagInfo,
239 equivalence.entityEquivalence, 218 equivalence.entityEquivalence,
240 (a, b) => a == b); 219 (a, b) => a == b);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 usage2.isInvokeOnUsed); 268 usage2.isInvokeOnUsed);
290 check(usage1, usage2, 'isRuntimeTypeUsed', usage1.isRuntimeTypeUsed, 269 check(usage1, usage2, 'isRuntimeTypeUsed', usage1.isRuntimeTypeUsed,
291 usage2.isRuntimeTypeUsed); 270 usage2.isRuntimeTypeUsed);
292 check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse, 271 check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse,
293 usage2.isIsolateInUse); 272 usage2.isIsolateInUse);
294 check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed, 273 check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed,
295 usage2.isFunctionApplyUsed); 274 usage2.isFunctionApplyUsed);
296 check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed, 275 check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed,
297 usage2.isNoSuchMethodUsed); 276 usage2.isNoSuchMethodUsed);
298 } 277 }
278
279 class MemoryDillLibraryLoaderTask extends DillLibraryLoaderTask {
280 final ir.Program program;
281
282 MemoryDillLibraryLoaderTask(KernelToElementMap elementMap,
283 DiagnosticReporter reporter, Measurer measurer, this.program)
284 : super(elementMap, null, null, reporter, measurer);
285
286 Future<LoadedLibraries> loadLibrary(Uri resolvedUri,
287 {bool skipFileWithPartOfTag: false}) async {
288 return createLoadedLibraries(program);
289 }
290 }
OLDNEW
« no previous file with comments | « tests/compiler/dart2js/inference/inference_test_helper.dart ('k') | tests/compiler/dart2js/kernel/constructors_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698