OLD | NEW |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |