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

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

Issue 2836993003: Handle instantiation of native classes in closed_world2_test (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) 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 17 matching lines...) Expand all
28 import 'package:compiler/src/js_backend/native_data.dart'; 28 import 'package:compiler/src/js_backend/native_data.dart';
29 import 'package:compiler/src/js_backend/impact_transformer.dart'; 29 import 'package:compiler/src/js_backend/impact_transformer.dart';
30 import 'package:compiler/src/js_backend/interceptor_data.dart'; 30 import 'package:compiler/src/js_backend/interceptor_data.dart';
31 import 'package:compiler/src/js_backend/lookup_map_analysis.dart'; 31 import 'package:compiler/src/js_backend/lookup_map_analysis.dart';
32 import 'package:compiler/src/js_backend/mirrors_analysis.dart'; 32 import 'package:compiler/src/js_backend/mirrors_analysis.dart';
33 import 'package:compiler/src/js_backend/mirrors_data.dart'; 33 import 'package:compiler/src/js_backend/mirrors_data.dart';
34 import 'package:compiler/src/js_backend/no_such_method_registry.dart'; 34 import 'package:compiler/src/js_backend/no_such_method_registry.dart';
35 import 'package:compiler/src/js_backend/resolution_listener.dart'; 35 import 'package:compiler/src/js_backend/resolution_listener.dart';
36 import 'package:compiler/src/js_backend/type_variable_handler.dart'; 36 import 'package:compiler/src/js_backend/type_variable_handler.dart';
37 import 'package:compiler/src/native/enqueue.dart'; 37 import 'package:compiler/src/native/enqueue.dart';
38 import 'package:compiler/src/native/resolver.dart';
38 import 'package:compiler/src/kernel/element_map.dart'; 39 import 'package:compiler/src/kernel/element_map.dart';
39 import 'package:compiler/src/options.dart'; 40 import 'package:compiler/src/options.dart';
40 import 'package:compiler/src/universe/world_builder.dart'; 41 import 'package:compiler/src/universe/world_builder.dart';
41 import 'package:compiler/src/universe/world_impact.dart'; 42 import 'package:compiler/src/universe/world_impact.dart';
42 import 'package:compiler/src/world.dart'; 43 import 'package:compiler/src/world.dart';
44 import 'package:expect/expect.dart';
43 import '../memory_compiler.dart'; 45 import '../memory_compiler.dart';
44 import '../serialization/helper.dart'; 46 import '../serialization/helper.dart';
45 import '../serialization/model_test_helper.dart'; 47 import '../serialization/model_test_helper.dart';
46 import '../serialization/test_helper.dart'; 48 import '../serialization/test_helper.dart';
47 49
48 import 'closed_world_test.dart'; 50 import 'closed_world_test.dart';
49 import 'impact_test.dart'; 51 import 'impact_test.dart';
50 52
51 const SOURCE = const { 53 const SOURCE = const {
52 'main.dart': ''' 54 'main.dart': '''
55 import 'dart:html';
56
53 main() { 57 main() {
54 print('Hello World'); 58 print('Hello World');
55 ''.contains; // Trigger member closurization. 59 ''.contains; // Trigger member closurization.
60 new Element.div();
56 } 61 }
57 ''' 62 '''
58 }; 63 };
59 64
60 main(List<String> args) { 65 main(List<String> args) {
61 Arguments arguments = new Arguments.from(args); 66 Arguments arguments = new Arguments.from(args);
62 Uri entryPoint; 67 Uri entryPoint;
63 Map<String, String> memorySourceFiles; 68 Map<String, String> memorySourceFiles;
64 if (arguments.uri != null) { 69 if (arguments.uri != null) {
65 entryPoint = arguments.uri; 70 entryPoint = arguments.uri;
66 memorySourceFiles = const <String, String>{}; 71 memorySourceFiles = const <String, String>{};
67 } else { 72 } else {
68 entryPoint = Uri.parse('memory:main.dart'); 73 entryPoint = Uri.parse('memory:main.dart');
69 memorySourceFiles = SOURCE; 74 memorySourceFiles = SOURCE;
70 } 75 }
71 76
72 asyncTest(() async { 77 asyncTest(() async {
73 enableDebugMode(); 78 enableDebugMode();
74 79
75 print('---- analyze-only ------------------------------------------------'); 80 print('---- analyze-only ------------------------------------------------');
76 Compiler compiler1 = compilerFor( 81 Compiler compiler1 = compilerFor(
77 entryPoint: entryPoint, 82 entryPoint: entryPoint,
78 memorySourceFiles: memorySourceFiles, 83 memorySourceFiles: memorySourceFiles,
79 options: [Flags.analyzeOnly, Flags.enableAssertMessage]); 84 options: [Flags.analyzeOnly, Flags.enableAssertMessage]);
80 ElementResolutionWorldBuilder.useInstantiationMap = true; 85 ElementResolutionWorldBuilder.useInstantiationMap = true;
81 compiler1.resolution.retainCachesForTesting = true; 86 compiler1.resolution.retainCachesForTesting = true;
82 await compiler1.run(entryPoint); 87 await compiler1.run(entryPoint);
88 Expect.isFalse(compiler1.compilationFailed);
83 ResolutionEnqueuer enqueuer1 = compiler1.enqueuer.resolution; 89 ResolutionEnqueuer enqueuer1 = compiler1.enqueuer.resolution;
84 BackendUsage backendUsage1 = compiler1.backend.backendUsage; 90 BackendUsage backendUsage1 = compiler1.backend.backendUsage;
85 ClosedWorld closedWorld1 = compiler1.resolutionWorldBuilder.closeWorld(); 91 ClosedWorld closedWorld1 = compiler1.resolutionWorldBuilder.closeWorld();
86 92
87 print('---- analyze-all -------------------------------------------------'); 93 print('---- analyze-all -------------------------------------------------');
88 Compiler compiler = compilerFor( 94 Compiler compiler = compilerFor(
89 entryPoint: entryPoint, 95 entryPoint: entryPoint,
90 memorySourceFiles: memorySourceFiles, 96 memorySourceFiles: memorySourceFiles,
91 options: [ 97 options: [
92 Flags.analyzeAll, 98 Flags.analyzeAll,
93 Flags.useKernel, 99 Flags.useKernel,
94 Flags.enableAssertMessage 100 Flags.enableAssertMessage
95 ]); 101 ]);
96 await compiler.run(entryPoint); 102 await compiler.run(entryPoint);
97 compiler.resolutionWorldBuilder.closeWorld(); 103 compiler.resolutionWorldBuilder.closeWorld();
98 104
99 print('---- closed world from kernel ------------------------------------'); 105 print('---- closed world from kernel ------------------------------------');
100 KernelToElementMap elementMap = new KernelToElementMap(compiler.reporter); 106 KernelToElementMap elementMap = new KernelToElementMap(compiler.reporter);
101 elementMap.addProgram(compiler.backend.kernelTask.program); 107 elementMap.addProgram(compiler.backend.kernelTask.program);
102 KernelEquivalence equivalence = new KernelEquivalence(elementMap); 108 KernelEquivalence equivalence = new KernelEquivalence(elementMap);
103 NativeBasicData nativeBasicData = computeNativeBasicData(elementMap); 109 NativeBasicData nativeBasicData = computeNativeBasicData(elementMap);
104 checkNativeBasicData( 110 checkNativeBasicData(
105 compiler.backend.nativeBasicData, nativeBasicData, equivalence); 111 compiler1.backend.nativeBasicData, nativeBasicData, equivalence);
106 List list = createKernelResolutionEnqueuerListener( 112 List list = createKernelResolutionEnqueuerListener(
107 compiler.options, 113 compiler.options,
108 compiler.reporter, 114 compiler.reporter,
109 compiler.deferredLoadTask, 115 compiler.deferredLoadTask,
110 elementMap, 116 elementMap,
111 nativeBasicData); 117 nativeBasicData);
112 ResolutionEnqueuerListener resolutionEnqueuerListener = list[0]; 118 ResolutionEnqueuerListener resolutionEnqueuerListener = list[0];
113 BackendUsageBuilder backendUsageBuilder2 = list[1]; 119 BackendUsageBuilder backendUsageBuilder2 = list[1];
114 ImpactTransformer impactTransformer = list[2]; 120 ImpactTransformer impactTransformer = list[2];
121
115 ResolutionEnqueuer enqueuer2 = new ResolutionEnqueuer( 122 ResolutionEnqueuer enqueuer2 = new ResolutionEnqueuer(
116 compiler.enqueuer, 123 compiler.enqueuer,
117 compiler.options, 124 compiler.options,
118 compiler.reporter, 125 compiler.reporter,
119 const TreeShakingEnqueuerStrategy(), 126 const TreeShakingEnqueuerStrategy(),
120 resolutionEnqueuerListener, 127 resolutionEnqueuerListener,
121 new KernelResolutionWorldBuilder( 128 new KernelResolutionWorldBuilder(
122 elementMap, nativeBasicData, const OpenWorldStrategy()), 129 elementMap, nativeBasicData, const OpenWorldStrategy()),
123 new KernelWorkItemBuilder(elementMap, impactTransformer), 130 new KernelWorkItemBuilder(elementMap, impactTransformer),
124 'enqueuer from kelements'); 131 'enqueuer from kelements');
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 LookupMapResolutionAnalysis lookupMapResolutionAnalysis = 165 LookupMapResolutionAnalysis lookupMapResolutionAnalysis =
159 new LookupMapResolutionAnalysis(reporter, elementEnvironment); 166 new LookupMapResolutionAnalysis(reporter, elementEnvironment);
160 167
161 InterceptorDataBuilder interceptorDataBuilder = 168 InterceptorDataBuilder interceptorDataBuilder =
162 new InterceptorDataBuilderImpl( 169 new InterceptorDataBuilderImpl(
163 nativeBasicData, elementEnvironment, commonElements); 170 nativeBasicData, elementEnvironment, commonElements);
164 BackendUsageBuilder backendUsageBuilder = 171 BackendUsageBuilder backendUsageBuilder =
165 new BackendUsageBuilderImpl(commonElements); 172 new BackendUsageBuilderImpl(commonElements);
166 NoSuchMethodRegistry noSuchMethodRegistry = new NoSuchMethodRegistry( 173 NoSuchMethodRegistry noSuchMethodRegistry = new NoSuchMethodRegistry(
167 commonElements, new KernelNoSuchMethodResolver(elementMap)); 174 commonElements, new KernelNoSuchMethodResolver(elementMap));
175 NativeClassResolver nativeClassResolver = new NativeClassResolverImpl(
Siggi Cherem (dart-lang) 2017/04/25 19:45:53 should we start using the strategy here?
Johnni Winther 2017/04/26 07:40:19 Yes.
176 elementEnvironment, commonElements, nativeBasicData);
168 NativeResolutionEnqueuer nativeResolutionEnqueuer = 177 NativeResolutionEnqueuer nativeResolutionEnqueuer =
169 new NativeResolutionEnqueuer(options, elementEnvironment, commonElements, 178 new NativeResolutionEnqueuer(options, elementEnvironment, commonElements,
170 backendUsageBuilder, new KernelNativeClassResolver(elementMap)); 179 backendUsageBuilder, nativeClassResolver);
171 180
172 ResolutionEnqueuerListener listener = new ResolutionEnqueuerListener( 181 ResolutionEnqueuerListener listener = new ResolutionEnqueuerListener(
173 options, 182 options,
174 elementEnvironment, 183 elementEnvironment,
175 commonElements, 184 commonElements,
176 impacts, 185 impacts,
177 nativeBasicData, 186 nativeBasicData,
178 interceptorDataBuilder, 187 interceptorDataBuilder,
179 backendUsageBuilder, 188 backendUsageBuilder,
180 rtiNeedBuilder, 189 rtiNeedBuilder,
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 usage2.isInvokeOnUsed); 390 usage2.isInvokeOnUsed);
382 check(usage1, usage2, 'isRuntimeTypeUsed', usage1.isRuntimeTypeUsed, 391 check(usage1, usage2, 'isRuntimeTypeUsed', usage1.isRuntimeTypeUsed,
383 usage2.isRuntimeTypeUsed); 392 usage2.isRuntimeTypeUsed);
384 check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse, 393 check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse,
385 usage2.isIsolateInUse); 394 usage2.isIsolateInUse);
386 check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed, 395 check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed,
387 usage2.isFunctionApplyUsed); 396 usage2.isFunctionApplyUsed);
388 check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed, 397 check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed,
389 usage2.isNoSuchMethodUsed); 398 usage2.isNoSuchMethodUsed);
390 } 399 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698