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

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

Issue 2836323002: Add more factory methods to FrontEndStrategy. (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
« no previous file with comments | « pkg/compiler/lib/src/resolution/resolution_strategy.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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';
11 import 'package:compiler/src/commandline_options.dart'; 11 import 'package:compiler/src/commandline_options.dart';
12 import 'package:compiler/src/common.dart'; 12 import 'package:compiler/src/common.dart';
13 import 'package:compiler/src/common_elements.dart'; 13 import 'package:compiler/src/common_elements.dart';
14 import 'package:compiler/src/common/backend_api.dart'; 14 import 'package:compiler/src/common/backend_api.dart';
15 import 'package:compiler/src/common/resolution.dart'; 15 import 'package:compiler/src/common/resolution.dart';
16 import 'package:compiler/src/common/work.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'; 20 import 'package:compiler/src/elements/elements.dart';
21 import 'package:compiler/src/elements/entities.dart'; 21 import 'package:compiler/src/elements/entities.dart';
22 import 'package:compiler/src/elements/types.dart'; 22 import 'package:compiler/src/elements/types.dart';
23 import 'package:compiler/src/enqueue.dart'; 23 import 'package:compiler/src/enqueue.dart';
24 import 'package:compiler/src/js_backend/backend.dart'; 24 import 'package:compiler/src/js_backend/backend.dart'
25 hide RuntimeTypesNeedBuilderImpl;
25 import 'package:compiler/src/js_backend/backend_impact.dart'; 26 import 'package:compiler/src/js_backend/backend_impact.dart';
26 import 'package:compiler/src/js_backend/backend_usage.dart'; 27 import 'package:compiler/src/js_backend/backend_usage.dart';
27 import 'package:compiler/src/js_backend/custom_elements_analysis.dart'; 28 import 'package:compiler/src/js_backend/custom_elements_analysis.dart';
28 import 'package:compiler/src/js_backend/native_data.dart'; 29 import 'package:compiler/src/js_backend/native_data.dart';
29 import 'package:compiler/src/js_backend/impact_transformer.dart'; 30 import 'package:compiler/src/js_backend/impact_transformer.dart';
30 import 'package:compiler/src/js_backend/interceptor_data.dart'; 31 import 'package:compiler/src/js_backend/interceptor_data.dart';
31 import 'package:compiler/src/js_backend/lookup_map_analysis.dart'; 32 import 'package:compiler/src/js_backend/lookup_map_analysis.dart';
32 import 'package:compiler/src/js_backend/mirrors_analysis.dart'; 33 import 'package:compiler/src/js_backend/mirrors_analysis.dart'
34 hide MirrorsResolutionAnalysisImpl;
33 import 'package:compiler/src/js_backend/mirrors_data.dart'; 35 import 'package:compiler/src/js_backend/mirrors_data.dart';
34 import 'package:compiler/src/js_backend/no_such_method_registry.dart'; 36 import 'package:compiler/src/js_backend/no_such_method_registry.dart';
35 import 'package:compiler/src/js_backend/resolution_listener.dart'; 37 import 'package:compiler/src/js_backend/resolution_listener.dart';
36 import 'package:compiler/src/js_backend/type_variable_handler.dart'; 38 import 'package:compiler/src/js_backend/type_variable_handler.dart';
37 import 'package:compiler/src/native/enqueue.dart'; 39 import 'package:compiler/src/native/enqueue.dart';
38 import 'package:compiler/src/native/resolver.dart'; 40 import 'package:compiler/src/native/resolver.dart';
39 import 'package:compiler/src/kernel/element_map.dart'; 41 import 'package:compiler/src/kernel/element_map.dart';
42 import 'package:compiler/src/kernel/kernel_strategy.dart';
40 import 'package:compiler/src/options.dart'; 43 import 'package:compiler/src/options.dart';
41 import 'package:compiler/src/universe/world_builder.dart'; 44 import 'package:compiler/src/universe/world_builder.dart';
42 import 'package:compiler/src/universe/world_impact.dart'; 45 import 'package:compiler/src/universe/world_impact.dart';
43 import 'package:compiler/src/world.dart'; 46 import 'package:compiler/src/world.dart';
44 import 'package:expect/expect.dart'; 47 import 'package:expect/expect.dart';
45 import '../memory_compiler.dart'; 48 import '../memory_compiler.dart';
46 import '../serialization/helper.dart'; 49 import '../serialization/helper.dart';
47 import '../serialization/model_test_helper.dart'; 50 import '../serialization/model_test_helper.dart';
48 import '../serialization/test_helper.dart'; 51 import '../serialization/test_helper.dart';
49 52
50 import 'closed_world_test.dart'; 53 import 'closed_world_test.dart' hide KernelWorkItemBuilder;
51 import 'impact_test.dart'; 54 import 'impact_test.dart';
52 55
53 const SOURCE = const { 56 const SOURCE = const {
54 'main.dart': ''' 57 'main.dart': '''
55 import 'dart:html'; 58 import 'dart:html';
56 59
57 main() { 60 main() {
58 print('Hello World'); 61 print('Hello World');
59 ''.contains; // Trigger member closurization. 62 ''.contains; // Trigger member closurization.
60 new Element.div(); 63 new Element.div();
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 CommonElements commonElements = elementMap.commonElements; 158 CommonElements commonElements = elementMap.commonElements;
156 BackendImpacts impacts = new BackendImpacts(options, commonElements); 159 BackendImpacts impacts = new BackendImpacts(options, commonElements);
157 160
158 // TODO(johnniwinther): Create Kernel based implementations for these: 161 // TODO(johnniwinther): Create Kernel based implementations for these:
159 RuntimeTypesNeedBuilder rtiNeedBuilder = new RuntimeTypesNeedBuilderImpl(); 162 RuntimeTypesNeedBuilder rtiNeedBuilder = new RuntimeTypesNeedBuilderImpl();
160 MirrorsDataBuilder mirrorsDataBuilder = new MirrorsDataBuilderImpl(); 163 MirrorsDataBuilder mirrorsDataBuilder = new MirrorsDataBuilderImpl();
161 CustomElementsResolutionAnalysis customElementsResolutionAnalysis = 164 CustomElementsResolutionAnalysis customElementsResolutionAnalysis =
162 new CustomElementsResolutionAnalysisImpl(); 165 new CustomElementsResolutionAnalysisImpl();
163 MirrorsResolutionAnalysis mirrorsResolutionAnalysis = 166 MirrorsResolutionAnalysis mirrorsResolutionAnalysis =
164 new MirrorsResolutionAnalysisImpl(); 167 new MirrorsResolutionAnalysisImpl();
168
165 LookupMapResolutionAnalysis lookupMapResolutionAnalysis = 169 LookupMapResolutionAnalysis lookupMapResolutionAnalysis =
166 new LookupMapResolutionAnalysis(reporter, elementEnvironment); 170 new LookupMapResolutionAnalysis(reporter, elementEnvironment);
167
168 InterceptorDataBuilder interceptorDataBuilder = 171 InterceptorDataBuilder interceptorDataBuilder =
169 new InterceptorDataBuilderImpl( 172 new InterceptorDataBuilderImpl(
170 nativeBasicData, elementEnvironment, commonElements); 173 nativeBasicData, elementEnvironment, commonElements);
171 BackendUsageBuilder backendUsageBuilder = 174 BackendUsageBuilder backendUsageBuilder =
172 new BackendUsageBuilderImpl(commonElements); 175 new BackendUsageBuilderImpl(commonElements);
173 NoSuchMethodRegistry noSuchMethodRegistry = new NoSuchMethodRegistry( 176 NoSuchMethodRegistry noSuchMethodRegistry = new NoSuchMethodRegistry(
174 commonElements, new KernelNoSuchMethodResolver(elementMap)); 177 commonElements, new KernelNoSuchMethodResolver(elementMap));
175 NativeClassResolver nativeClassResolver = new NativeClassResolverImpl( 178 NativeClassResolver nativeClassResolver = new NativeClassResolverImpl(
176 elementEnvironment, commonElements, nativeBasicData); 179 elementEnvironment, commonElements, nativeBasicData);
177 NativeResolutionEnqueuer nativeResolutionEnqueuer = 180 NativeResolutionEnqueuer nativeResolutionEnqueuer =
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 ElementEnvironment elementEnvironment = elementMap.elementEnvironment; 221 ElementEnvironment elementEnvironment = elementMap.elementEnvironment;
219 for (LibraryEntity library in elementEnvironment.libraries) { 222 for (LibraryEntity library in elementEnvironment.libraries) {
220 if (library.canonicalUri.scheme == 'dart') { 223 if (library.canonicalUri.scheme == 'dart') {
221 new KernelAnnotationProcessor(elementMap) 224 new KernelAnnotationProcessor(elementMap)
222 .extractNativeAnnotations(library, builder); 225 .extractNativeAnnotations(library, builder);
223 } 226 }
224 } 227 }
225 return builder.close(elementEnvironment); 228 return builder.close(elementEnvironment);
226 } 229 }
227 230
228 class RuntimeTypesNeedBuilderImpl implements RuntimeTypesNeedBuilder {
229 @override
230 void registerClassUsingTypeVariableExpression(ClassEntity cls) {}
231
232 @override
233 RuntimeTypesNeed computeRuntimeTypesNeed(
234 ResolutionWorldBuilder resolutionWorldBuilder,
235 ClosedWorld closedWorld,
236 DartTypes types,
237 CommonElements commonElements,
238 BackendUsage backendUsage,
239 {bool enableTypeAssertions}) {
240 throw new UnimplementedError(
241 'RuntimeTypesNeedBuilderImpl.computeRuntimeTypesNeed');
242 }
243
244 @override
245 void registerRtiDependency(ClassEntity element, ClassEntity dependency) {}
246 }
247
248 class MirrorsDataBuilderImpl implements MirrorsDataBuilder {
249 @override
250 void registerUsedMember(MemberEntity member) {}
251
252 @override
253 void computeMembersNeededForReflection(
254 ResolutionWorldBuilder worldBuilder, ClosedWorld closedWorld) {}
255
256 @override
257 void maybeMarkClosureAsNeededForReflection(
258 ClosureClassElement globalizedElement,
259 FunctionElement callFunction,
260 FunctionElement function) {}
261
262 @override
263 void registerConstSymbol(String name) {}
264
265 @override
266 void registerMirrorUsage(
267 Set<String> symbols, Set<Element> targets, Set<Element> metaTargets) {}
268 }
269
270 class CustomElementsResolutionAnalysisImpl
271 implements CustomElementsResolutionAnalysis {
272 @override
273 CustomElementsAnalysisJoin get join {
274 throw new UnimplementedError('CustomElementsResolutionAnalysisImpl.join');
275 }
276
277 @override
278 WorldImpact flush() {
279 // TODO(johnniwinther): Implement this.
280 return const WorldImpact();
281 }
282
283 @override
284 void registerStaticUse(MemberEntity element) {}
285
286 @override
287 void registerInstantiatedClass(ClassEntity classElement) {}
288
289 @override
290 void registerTypeLiteral(DartType type) {}
291 }
292
293 class MirrorsResolutionAnalysisImpl implements MirrorsResolutionAnalysis {
294 @override
295 void onQueueEmpty(Enqueuer enqueuer, Iterable<ClassEntity> recentClasses) {}
296
297 @override
298 MirrorsCodegenAnalysis close() {
299 throw new UnimplementedError('MirrorsResolutionAnalysisImpl.close');
300 }
301
302 @override
303 void onResolutionComplete() {}
304 }
305
306 class KernelWorkItemBuilder implements WorkItemBuilder {
307 final KernelToElementMap _worldBuilder;
308 final ImpactTransformer _impactTransformer;
309
310 KernelWorkItemBuilder(this._worldBuilder, this._impactTransformer);
311
312 @override
313 WorkItem createWorkItem(MemberEntity entity) {
314 return new KernelWorkItem(_worldBuilder, _impactTransformer, entity);
315 }
316 }
317
318 class KernelWorkItem implements ResolutionWorkItem {
319 final KernelToElementMap _worldBuilder;
320 final ImpactTransformer _impactTransformer;
321 final MemberEntity element;
322
323 KernelWorkItem(this._worldBuilder, this._impactTransformer, this.element);
324
325 @override
326 WorldImpact run() {
327 ResolutionImpact impact = _worldBuilder.computeWorldImpact(element);
328 return _impactTransformer.transformResolutionImpact(impact);
329 }
330 }
331
332 void checkNativeBasicData(NativeBasicDataImpl data1, NativeBasicDataImpl data2, 231 void checkNativeBasicData(NativeBasicDataImpl data1, NativeBasicDataImpl data2,
333 KernelEquivalence equivalence) { 232 KernelEquivalence equivalence) {
334 checkMapEquivalence( 233 checkMapEquivalence(
335 data1, 234 data1,
336 data2, 235 data2,
337 'nativeClassTagInfo', 236 'nativeClassTagInfo',
338 data1.nativeClassTagInfo, 237 data1.nativeClassTagInfo,
339 data2.nativeClassTagInfo, 238 data2.nativeClassTagInfo,
340 equivalence.entityEquivalence, 239 equivalence.entityEquivalence,
341 (a, b) => a == b); 240 (a, b) => a == b);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 usage2.isInvokeOnUsed); 289 usage2.isInvokeOnUsed);
391 check(usage1, usage2, 'isRuntimeTypeUsed', usage1.isRuntimeTypeUsed, 290 check(usage1, usage2, 'isRuntimeTypeUsed', usage1.isRuntimeTypeUsed,
392 usage2.isRuntimeTypeUsed); 291 usage2.isRuntimeTypeUsed);
393 check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse, 292 check(usage1, usage2, 'isIsolateInUse', usage1.isIsolateInUse,
394 usage2.isIsolateInUse); 293 usage2.isIsolateInUse);
395 check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed, 294 check(usage1, usage2, 'isFunctionApplyUsed', usage1.isFunctionApplyUsed,
396 usage2.isFunctionApplyUsed); 295 usage2.isFunctionApplyUsed);
397 check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed, 296 check(usage1, usage2, 'isNoSuchMethodUsed', usage1.isNoSuchMethodUsed,
398 usage2.isNoSuchMethodUsed); 297 usage2.isNoSuchMethodUsed);
399 } 298 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/resolution_strategy.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698