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

Side by Side Diff: pkg/compiler/lib/src/kernel/kernel_strategy.dart

Issue 2979373003: Compute closure model during resolution (Closed)
Patch Set: Rebased Created 3 years, 4 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/kernel/element_map_impl.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 library dart2js.kernel.frontend_strategy; 5 library dart2js.kernel.frontend_strategy;
6 6
7 import '../../compiler_new.dart' as api; 7 import '../../compiler_new.dart' as api;
8 import '../common.dart'; 8 import '../common.dart';
9 import '../common_elements.dart'; 9 import '../common_elements.dart';
10 import '../common/backend_api.dart'; 10 import '../common/backend_api.dart';
11 import '../common/resolution.dart'; 11 import '../common/resolution.dart';
12 import '../common/tasks.dart'; 12 import '../common/tasks.dart';
13 import '../common/work.dart'; 13 import '../common/work.dart';
14 import '../elements/elements.dart'; 14 import '../elements/elements.dart';
15 import '../elements/entities.dart'; 15 import '../elements/entities.dart';
16 import '../elements/types.dart'; 16 import '../elements/types.dart';
17 import '../environment.dart' as env; 17 import '../environment.dart' as env;
18 import '../enqueue.dart'; 18 import '../enqueue.dart';
19 import '../frontend_strategy.dart'; 19 import '../frontend_strategy.dart';
20 import '../js_backend/backend.dart'; 20 import '../js_backend/backend.dart';
21 import '../js_backend/backend_usage.dart'; 21 import '../js_backend/backend_usage.dart';
22 import '../js_backend/interceptor_data.dart'; 22 import '../js_backend/interceptor_data.dart';
23 import '../js_backend/mirrors_analysis.dart'; 23 import '../js_backend/mirrors_analysis.dart';
24 import '../js_backend/mirrors_data.dart'; 24 import '../js_backend/mirrors_data.dart';
25 import '../js_backend/native_data.dart'; 25 import '../js_backend/native_data.dart';
26 import '../js_backend/no_such_method_registry.dart'; 26 import '../js_backend/no_such_method_registry.dart';
27 import '../js_backend/runtime_types.dart'; 27 import '../js_backend/runtime_types.dart';
28 import '../js_model/closure.dart' show ClosureModel;
28 import '../library_loader.dart'; 29 import '../library_loader.dart';
29 import '../native/enqueue.dart' show NativeResolutionEnqueuer; 30 import '../native/enqueue.dart' show NativeResolutionEnqueuer;
30 import '../native/resolver.dart'; 31 import '../native/resolver.dart';
31 import '../options.dart'; 32 import '../options.dart';
32 import '../serialization/task.dart'; 33 import '../serialization/task.dart';
33 import '../patch_parser.dart'; 34 import '../patch_parser.dart';
34 import '../resolved_uri_translator.dart'; 35 import '../resolved_uri_translator.dart';
35 import '../universe/world_builder.dart'; 36 import '../universe/world_builder.dart';
36 import '../universe/world_impact.dart'; 37 import '../universe/world_impact.dart';
37 import '../world.dart'; 38 import '../world.dart';
38 import 'element_map.dart'; 39 import 'element_map.dart';
39 import 'element_map_impl.dart'; 40 import 'element_map_impl.dart';
40 41
41 /// Front end strategy that loads '.dill' files and builds a resolved element 42 /// Front end strategy that loads '.dill' files and builds a resolved element
42 /// model from kernel IR nodes. 43 /// model from kernel IR nodes.
43 class KernelFrontEndStrategy extends FrontendStrategyBase { 44 class KernelFrontEndStrategy extends FrontendStrategyBase {
44 CompilerOptions _options; 45 CompilerOptions _options;
45 KernelToElementMapForImpactImpl _elementMap; 46 KernelToElementMapForImpactImpl _elementMap;
46 47
47 KernelAnnotationProcessor _annotationProcesser; 48 KernelAnnotationProcessor _annotationProcesser;
48 49
50 final Map<MemberEntity, ClosureModel> closureModels =
51 <MemberEntity, ClosureModel>{};
52
49 KernelFrontEndStrategy( 53 KernelFrontEndStrategy(
50 this._options, DiagnosticReporter reporter, env.Environment environment) 54 this._options, DiagnosticReporter reporter, env.Environment environment)
51 : _elementMap = 55 : _elementMap =
52 new KernelToElementMapForImpactImpl(reporter, environment); 56 new KernelToElementMapForImpactImpl(reporter, environment);
53 57
54 @override 58 @override
55 LibraryLoaderTask createLibraryLoader( 59 LibraryLoaderTask createLibraryLoader(
56 ResolvedUriTranslator uriTranslator, 60 ResolvedUriTranslator uriTranslator,
57 ScriptLoader scriptLoader, 61 ScriptLoader scriptLoader,
58 api.CompilerInput compilerInput, 62 api.CompilerInput compilerInput,
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 backendUsageBuilder, 133 backendUsageBuilder,
130 rtiNeedBuilder, 134 rtiNeedBuilder,
131 nativeResolutionEnqueuer, 135 nativeResolutionEnqueuer,
132 selectorConstraintsStrategy); 136 selectorConstraintsStrategy);
133 } 137 }
134 138
135 WorkItemBuilder createResolutionWorkItemBuilder( 139 WorkItemBuilder createResolutionWorkItemBuilder(
136 NativeBasicData nativeBasicData, 140 NativeBasicData nativeBasicData,
137 NativeDataBuilder nativeDataBuilder, 141 NativeDataBuilder nativeDataBuilder,
138 ImpactTransformer impactTransformer) { 142 ImpactTransformer impactTransformer) {
139 return new KernelWorkItemBuilder( 143 return new KernelWorkItemBuilder(elementMap, nativeBasicData,
140 elementMap, nativeBasicData, nativeDataBuilder, impactTransformer); 144 nativeDataBuilder, impactTransformer, closureModels);
141 } 145 }
142 146
143 @override 147 @override
144 SourceSpan spanFromSpannable(Spannable spannable, Entity currentElement) { 148 SourceSpan spanFromSpannable(Spannable spannable, Entity currentElement) {
145 return _elementMap.getSourceSpan(spannable, currentElement); 149 return _elementMap.getSourceSpan(spannable, currentElement);
146 } 150 }
147 } 151 }
148 152
149 class KernelWorkItemBuilder implements WorkItemBuilder { 153 class KernelWorkItemBuilder implements WorkItemBuilder {
150 final KernelToElementMapForImpactImpl _elementMap; 154 final KernelToElementMapForImpactImpl _elementMap;
151 final ImpactTransformer _impactTransformer; 155 final ImpactTransformer _impactTransformer;
152 final NativeMemberResolver _nativeMemberResolver; 156 final NativeMemberResolver _nativeMemberResolver;
157 final Map<MemberEntity, ClosureModel> closureModels;
153 158
154 KernelWorkItemBuilder(this._elementMap, NativeBasicData nativeBasicData, 159 KernelWorkItemBuilder(
155 NativeDataBuilder nativeDataBuilder, this._impactTransformer) 160 this._elementMap,
161 NativeBasicData nativeBasicData,
162 NativeDataBuilder nativeDataBuilder,
163 this._impactTransformer,
164 this.closureModels)
156 : _nativeMemberResolver = new KernelNativeMemberResolver( 165 : _nativeMemberResolver = new KernelNativeMemberResolver(
157 _elementMap, nativeBasicData, nativeDataBuilder); 166 _elementMap, nativeBasicData, nativeDataBuilder);
158 167
159 @override 168 @override
160 WorkItem createWorkItem(MemberEntity entity) { 169 WorkItem createWorkItem(MemberEntity entity) {
161 return new KernelWorkItem( 170 return new KernelWorkItem(_elementMap, _impactTransformer,
162 _elementMap, _impactTransformer, _nativeMemberResolver, entity); 171 _nativeMemberResolver, entity, closureModels);
163 } 172 }
164 } 173 }
165 174
166 class KernelWorkItem implements ResolutionWorkItem { 175 class KernelWorkItem implements ResolutionWorkItem {
167 final KernelToElementMapForImpactImpl _elementMap; 176 final KernelToElementMapForImpactImpl _elementMap;
168 final ImpactTransformer _impactTransformer; 177 final ImpactTransformer _impactTransformer;
169 final NativeMemberResolver _nativeMemberResolver; 178 final NativeMemberResolver _nativeMemberResolver;
170 final MemberEntity element; 179 final MemberEntity element;
180 final Map<MemberEntity, ClosureModel> closureModels;
171 181
172 KernelWorkItem(this._elementMap, this._impactTransformer, 182 KernelWorkItem(this._elementMap, this._impactTransformer,
173 this._nativeMemberResolver, this.element); 183 this._nativeMemberResolver, this.element, this.closureModels);
174 184
175 @override 185 @override
176 WorldImpact run() { 186 WorldImpact run() {
177 _nativeMemberResolver.resolveNativeMember(element); 187 _nativeMemberResolver.resolveNativeMember(element);
178 ResolutionImpact impact = _elementMap.computeWorldImpact(element); 188 ResolutionImpact impact = _elementMap.computeWorldImpact(element);
189 ClosureModel closureModel = _elementMap.computeClosureModel(element);
190 if (closureModel != null) {
191 closureModels[element] = closureModel;
192 }
179 return _impactTransformer.transformResolutionImpact(impact); 193 return _impactTransformer.transformResolutionImpact(impact);
180 } 194 }
181 } 195 }
182 196
183 /// Mock implementation of [MirrorsDataImpl]. 197 /// Mock implementation of [MirrorsDataImpl].
184 class MirrorsDataBuilderImpl extends MirrorsDataImpl { 198 class MirrorsDataBuilderImpl extends MirrorsDataImpl {
185 MirrorsDataBuilderImpl( 199 MirrorsDataBuilderImpl(
186 ElementEnvironment elementEnvironment, CommonElements commonElements) 200 ElementEnvironment elementEnvironment, CommonElements commonElements)
187 : super(null, null, elementEnvironment, commonElements); 201 : super(null, null, elementEnvironment, commonElements);
188 202
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 int get preMirrorsMethodCount { 242 int get preMirrorsMethodCount {
229 // TODO(redemption): Implement this. 243 // TODO(redemption): Implement this.
230 return null; 244 return null;
231 } 245 }
232 246
233 @override 247 @override
234 void onQueueEmpty(Enqueuer enqueuer, Iterable<ClassEntity> recentClasses) { 248 void onQueueEmpty(Enqueuer enqueuer, Iterable<ClassEntity> recentClasses) {
235 // TODO(redemption): Implement this. 249 // TODO(redemption): Implement this.
236 } 250 }
237 } 251 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/kernel/element_map_impl.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698