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

Side by Side Diff: pkg/compiler/lib/src/js_backend/resolution_listener.dart

Issue 2729943004: Remove backend reference from ResolutionEnqueuerListener. (Closed)
Patch Set: Created 3 years, 9 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 library js_backend.backend.resolution_listener; 5 library js_backend.backend.resolution_listener;
6 6
7 import '../common/names.dart' show Identifiers, Uris; 7 import '../common/names.dart' show Identifiers, Uris;
8 import '../common/resolution.dart' show Resolution;
9 import '../common_elements.dart' show CommonElements, ElementEnvironment; 8 import '../common_elements.dart' show CommonElements, ElementEnvironment;
10 import '../elements/elements.dart'; 9 import '../elements/elements.dart';
11 import '../elements/entities.dart'; 10 import '../elements/entities.dart';
12 import '../elements/types.dart'; 11 import '../elements/types.dart';
13 import '../enqueue.dart' show Enqueuer, EnqueuerListener; 12 import '../enqueue.dart' show Enqueuer, EnqueuerListener;
14 import '../kernel/task.dart'; 13 import '../kernel/task.dart';
15 import '../native/enqueue.dart'; 14 import '../native/enqueue.dart';
16 import '../options.dart' show CompilerOptions; 15 import '../options.dart' show CompilerOptions;
17 import '../universe/call_structure.dart' show CallStructure; 16 import '../universe/call_structure.dart' show CallStructure;
18 import '../universe/use.dart' show StaticUse, TypeUse; 17 import '../universe/use.dart' show StaticUse, TypeUse;
19 import '../universe/world_impact.dart' 18 import '../universe/world_impact.dart'
20 show WorldImpact, WorldImpactBuilder, WorldImpactBuilderImpl; 19 show WorldImpact, WorldImpactBuilder, WorldImpactBuilderImpl;
21 import 'backend.dart'; 20 import 'backend.dart';
22 import 'backend_helpers.dart'; 21 import 'backend_helpers.dart';
23 import 'backend_impact.dart'; 22 import 'backend_impact.dart';
24 import 'backend_usage.dart'; 23 import 'backend_usage.dart';
25 import 'checked_mode_helpers.dart'; 24 import 'checked_mode_helpers.dart';
26 import 'custom_elements_analysis.dart'; 25 import 'custom_elements_analysis.dart';
27 import 'interceptor_data.dart'; 26 import 'interceptor_data.dart';
28 import 'lookup_map_analysis.dart' show LookupMapLibraryAccess; 27 import 'lookup_map_analysis.dart' show LookupMapLibraryAccess;
29 import 'mirrors_analysis.dart'; 28 import 'mirrors_analysis.dart';
30 import 'mirrors_data.dart'; 29 import 'mirrors_data.dart';
31 import 'native_data.dart' show NativeData; 30 import 'native_data.dart' show NativeData;
32 import 'no_such_method_registry.dart'; 31 import 'no_such_method_registry.dart';
33 import 'type_variable_handler.dart'; 32 import 'type_variable_handler.dart';
34 33
35 class ResolutionEnqueuerListener extends EnqueuerListener { 34 class ResolutionEnqueuerListener extends EnqueuerListener {
36 // TODO(johnniwinther): Avoid the need for accessing through [_backend]. 35 // TODO(johnniwinther): Avoid the need for this.
37 final JavaScriptBackend _backend; 36 final KernelTask _kernelTask;
38 37
39 final CompilerOptions _options; 38 final CompilerOptions _options;
40 final CommonElements _commonElements; 39 final CommonElements _commonElements;
41 final BackendHelpers _helpers; 40 final BackendHelpers _helpers;
42 final BackendImpacts _impacts; 41 final BackendImpacts _impacts;
43 final ElementEnvironment _elementEnvironment; 42 final ElementEnvironment _elementEnvironment;
44 43
45 final NativeData _nativeData; 44 final NativeData _nativeData;
46 final InterceptorDataBuilder _interceptorData; 45 final InterceptorDataBuilder _interceptorData;
47 final BackendUsageBuilder _backendUsage; 46 final BackendUsageBuilder _backendUsage;
48 final RuntimeTypesNeedBuilder _rtiNeedBuilder; 47 final RuntimeTypesNeedBuilder _rtiNeedBuilder;
49 final MirrorsData _mirrorsData; 48 final MirrorsData _mirrorsData;
50 49
51 final NoSuchMethodRegistry _noSuchMethodRegistry; 50 final NoSuchMethodRegistry _noSuchMethodRegistry;
52 final CustomElementsResolutionAnalysis _customElementsAnalysis; 51 final CustomElementsResolutionAnalysis _customElementsAnalysis;
53 final LookupMapLibraryAccess _lookupMapLibraryAccess; 52 final LookupMapLibraryAccess _lookupMapLibraryAccess;
54 final MirrorsAnalysis _mirrorsAnalysis; 53 final MirrorsAnalysis _mirrorsAnalysis;
54 final TypeVariableAnalysis _typeVariableAnalysis;
55 55
56 final NativeResolutionEnqueuer _nativeEnqueuer; 56 final NativeResolutionEnqueuer _nativeEnqueuer;
57 57
58 /// True when we enqueue the loadLibrary code. 58 /// True when we enqueue the loadLibrary code.
59 bool _isLoadLibraryFunctionResolved = false; 59 bool _isLoadLibraryFunctionResolved = false;
60
60 ResolutionEnqueuerListener( 61 ResolutionEnqueuerListener(
61 this._backend, 62 this._kernelTask,
62 this._options, 63 this._options,
63 this._elementEnvironment, 64 this._elementEnvironment,
64 this._commonElements, 65 this._commonElements,
65 this._helpers, 66 this._helpers,
66 this._impacts, 67 this._impacts,
67 this._nativeData, 68 this._nativeData,
68 this._interceptorData, 69 this._interceptorData,
69 this._backendUsage, 70 this._backendUsage,
70 this._rtiNeedBuilder, 71 this._rtiNeedBuilder,
71 this._mirrorsData, 72 this._mirrorsData,
72 this._noSuchMethodRegistry, 73 this._noSuchMethodRegistry,
73 this._customElementsAnalysis, 74 this._customElementsAnalysis,
74 this._lookupMapLibraryAccess, 75 this._lookupMapLibraryAccess,
75 this._mirrorsAnalysis, 76 this._mirrorsAnalysis,
77 this._typeVariableAnalysis,
76 this._nativeEnqueuer); 78 this._nativeEnqueuer);
77 79
78 // TODO(johnniwinther): Avoid the need for these.
79 Resolution get _resolution => _backend.resolution;
80 KernelTask get _kernelTask => _backend.kernelTask;
81
82 // TODO(johnniwinther): Change this to a final field. Currently breaks
83 // `kernel/closed_world_test`.
84 TypeVariableAnalysis get _typeVariableAnalysis =>
85 _backend.typeVariableAnalysis;
86
87 void _registerBackendImpact( 80 void _registerBackendImpact(
88 WorldImpactBuilder builder, BackendImpact impact) { 81 WorldImpactBuilder builder, BackendImpact impact) {
89 impact.registerImpact(builder, _elementEnvironment); 82 impact.registerImpact(builder, _elementEnvironment);
90 _backendUsage.processBackendImpact(impact); 83 _backendUsage.processBackendImpact(impact);
91 } 84 }
92 85
93 void _addInterceptors(ClassElement cls, WorldImpactBuilder impactBuilder) { 86 void _addInterceptors(ClassElement cls, WorldImpactBuilder impactBuilder) {
94 cls.ensureResolved(_resolution);
95 _interceptorData.addInterceptors(cls); 87 _interceptorData.addInterceptors(cls);
96 impactBuilder.registerTypeUse(new TypeUse.instantiation(cls.rawType)); 88 impactBuilder.registerTypeUse(new TypeUse.instantiation(cls.rawType));
97 _backendUsage.registerBackendClassUse(cls); 89 _backendUsage.registerBackendClassUse(cls);
98 } 90 }
99 91
100 @override 92 @override
101 WorldImpact registerClosurizedMember(MemberElement element) { 93 WorldImpact registerClosurizedMember(MemberElement element) {
102 WorldImpactBuilderImpl impactBuilder = new WorldImpactBuilderImpl(); 94 WorldImpactBuilderImpl impactBuilder = new WorldImpactBuilderImpl();
103 _backendUsage.processBackendImpact(_impacts.memberClosure); 95 _backendUsage.processBackendImpact(_impacts.memberClosure);
104 impactBuilder 96 impactBuilder
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 _addInterceptors(_helpers.jsNumberClass, impactBuilder); 352 _addInterceptors(_helpers.jsNumberClass, impactBuilder);
361 } else if (cls == _helpers.jsJavaScriptObjectClass) { 353 } else if (cls == _helpers.jsJavaScriptObjectClass) {
362 _addInterceptors(_helpers.jsJavaScriptObjectClass, impactBuilder); 354 _addInterceptors(_helpers.jsJavaScriptObjectClass, impactBuilder);
363 } else if (cls == _helpers.jsPlainJavaScriptObjectClass) { 355 } else if (cls == _helpers.jsPlainJavaScriptObjectClass) {
364 _addInterceptors(_helpers.jsPlainJavaScriptObjectClass, impactBuilder); 356 _addInterceptors(_helpers.jsPlainJavaScriptObjectClass, impactBuilder);
365 } else if (cls == _helpers.jsUnknownJavaScriptObjectClass) { 357 } else if (cls == _helpers.jsUnknownJavaScriptObjectClass) {
366 _addInterceptors(_helpers.jsUnknownJavaScriptObjectClass, impactBuilder); 358 _addInterceptors(_helpers.jsUnknownJavaScriptObjectClass, impactBuilder);
367 } else if (cls == _helpers.jsJavaScriptFunctionClass) { 359 } else if (cls == _helpers.jsJavaScriptFunctionClass) {
368 _addInterceptors(_helpers.jsJavaScriptFunctionClass, impactBuilder); 360 _addInterceptors(_helpers.jsJavaScriptFunctionClass, impactBuilder);
369 } else if (_nativeData.isNativeOrExtendsNative(cls)) { 361 } else if (_nativeData.isNativeOrExtendsNative(cls)) {
370 _addInterceptorsForNativeClassMembers(cls); 362 _interceptorData.addInterceptorsForNativeClassMembers(cls);
371 } else if (cls == _helpers.jsIndexingBehaviorInterface) { 363 } else if (cls == _helpers.jsIndexingBehaviorInterface) {
372 _registerBackendImpact(impactBuilder, _impacts.jsIndexingBehavior); 364 _registerBackendImpact(impactBuilder, _impacts.jsIndexingBehavior);
373 } 365 }
374 366
375 _customElementsAnalysis.registerInstantiatedClass(cls); 367 _customElementsAnalysis.registerInstantiatedClass(cls);
376 return impactBuilder; 368 return impactBuilder;
377 } 369 }
378 370
379 void _addInterceptorsForNativeClassMembers(ClassElement cls) {
380 cls.ensureResolved(_resolution);
381 _interceptorData.addInterceptorsForNativeClassMembers(cls);
382 }
383
384 @override 371 @override
385 WorldImpact registerImplementedClass(ClassEntity cls) { 372 WorldImpact registerImplementedClass(ClassEntity cls) {
386 return _processClass(cls); 373 return _processClass(cls);
387 } 374 }
388 375
389 @override 376 @override
390 WorldImpact registerInstantiatedClass(ClassEntity cls) { 377 WorldImpact registerInstantiatedClass(ClassEntity cls) {
391 return _processClass(cls); 378 return _processClass(cls);
392 } 379 }
393 380
(...skipping 12 matching lines...) Expand all
406 393
407 if (JavaScriptBackend.TRACE_CALLS) { 394 if (JavaScriptBackend.TRACE_CALLS) {
408 _registerBackendImpact(impactBuilder, _impacts.traceHelper); 395 _registerBackendImpact(impactBuilder, _impacts.traceHelper);
409 } 396 }
410 _registerBackendImpact(impactBuilder, _impacts.assertUnreachable); 397 _registerBackendImpact(impactBuilder, _impacts.assertUnreachable);
411 _registerCheckedModeHelpers(impactBuilder); 398 _registerCheckedModeHelpers(impactBuilder);
412 return impactBuilder; 399 return impactBuilder;
413 } 400 }
414 401
415 void _registerCheckedModeHelpers(WorldImpactBuilder impactBuilder) { 402 void _registerCheckedModeHelpers(WorldImpactBuilder impactBuilder) {
416 // We register all the _helpers in the _resolution queue. 403 // We register all the _helpers in the resolution queue.
417 // TODO(13155): Find a way to register fewer _helpers. 404 // TODO(13155): Find a way to register fewer _helpers.
418 List<FunctionEntity> staticUses = <FunctionEntity>[]; 405 List<FunctionEntity> staticUses = <FunctionEntity>[];
419 for (CheckedModeHelper helper in CheckedModeHelpers.helpers) { 406 for (CheckedModeHelper helper in CheckedModeHelpers.helpers) {
420 staticUses.add(helper.getStaticUse(_helpers).element); 407 staticUses.add(helper.getStaticUse(_helpers).element);
421 } 408 }
422 _registerBackendImpact( 409 _registerBackendImpact(
423 impactBuilder, new BackendImpact(globalUses: staticUses)); 410 impactBuilder, new BackendImpact(globalUses: staticUses));
424 } 411 }
425 412
426 void logSummary(void log(String message)) { 413 void logSummary(void log(String message)) {
427 _nativeEnqueuer.logSummary(log); 414 _nativeEnqueuer.logSummary(log);
428 } 415 }
429 } 416 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698