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

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

Issue 2905623002: Extract type inference queries from KernelAstAdapter to KernelToTypeInferenceMap (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
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 '../closure.dart'; 7 import '../closure.dart';
8 import '../backend_strategy.dart';
9 import '../common.dart'; 8 import '../common.dart';
10 import '../common_elements.dart'; 9 import '../common_elements.dart';
11 import '../common/backend_api.dart'; 10 import '../common/backend_api.dart';
12 import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem;
13 import '../common/resolution.dart'; 11 import '../common/resolution.dart';
14 import '../common/tasks.dart'; 12 import '../common/tasks.dart';
15 import '../common/work.dart'; 13 import '../common/work.dart';
16 import '../compiler.dart';
17 import '../elements/elements.dart'; 14 import '../elements/elements.dart';
18 import '../elements/entities.dart'; 15 import '../elements/entities.dart';
19 import '../elements/types.dart'; 16 import '../elements/types.dart';
20 import '../environment.dart' as env; 17 import '../environment.dart' as env;
21 import '../enqueue.dart'; 18 import '../enqueue.dart';
22 import '../frontend_strategy.dart'; 19 import '../frontend_strategy.dart';
23 import '../io/source_information.dart';
24 import '../js_backend/backend.dart'; 20 import '../js_backend/backend.dart';
25 import '../js_backend/backend_usage.dart'; 21 import '../js_backend/backend_usage.dart';
26 import '../js_backend/custom_elements_analysis.dart'; 22 import '../js_backend/custom_elements_analysis.dart';
27 import '../js_backend/interceptor_data.dart'; 23 import '../js_backend/interceptor_data.dart';
28 import '../js_backend/mirrors_analysis.dart'; 24 import '../js_backend/mirrors_analysis.dart';
29 import '../js_backend/mirrors_data.dart'; 25 import '../js_backend/mirrors_data.dart';
30 import '../js_backend/native_data.dart'; 26 import '../js_backend/native_data.dart';
31 import '../js_backend/no_such_method_registry.dart'; 27 import '../js_backend/no_such_method_registry.dart';
32 import '../js_backend/runtime_types.dart'; 28 import '../js_backend/runtime_types.dart';
33 import '../js_emitter/sorter.dart';
34 import '../kernel/element_map.dart';
35 import '../library_loader.dart'; 29 import '../library_loader.dart';
36 import '../native/resolver.dart'; 30 import '../native/resolver.dart';
37 import '../serialization/task.dart'; 31 import '../serialization/task.dart';
38 import '../ssa/builder_kernel.dart';
39 import '../ssa/nodes.dart';
40 import '../ssa/ssa.dart';
41 import '../patch_parser.dart'; 32 import '../patch_parser.dart';
42 import '../resolved_uri_translator.dart'; 33 import '../resolved_uri_translator.dart';
43 import '../universe/world_builder.dart'; 34 import '../universe/world_builder.dart';
44 import '../universe/world_impact.dart'; 35 import '../universe/world_impact.dart';
45 import '../world.dart'; 36 import '../world.dart';
46 import 'element_map_impl.dart'; 37 import 'element_map_impl.dart';
47 38
48 /// Front end strategy that loads '.dill' files and builds a resolved element 39 /// Front end strategy that loads '.dill' files and builds a resolved element
49 /// model from kernel IR nodes. 40 /// model from kernel IR nodes.
50 class KernelFrontEndStrategy implements FrontEndStrategy { 41 class KernelFrontEndStrategy implements FrontEndStrategy {
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 @override 229 @override
239 MirrorsCodegenAnalysis close() { 230 MirrorsCodegenAnalysis close() {
240 // TODO(johnniwinther): Implement this. 231 // TODO(johnniwinther): Implement this.
241 return new MirrorsCodegenAnalysisImpl(); 232 return new MirrorsCodegenAnalysisImpl();
242 } 233 }
243 234
244 @override 235 @override
245 void onResolutionComplete() {} 236 void onResolutionComplete() {}
246 } 237 }
247 238
248 /// Backend strategy that uses the kernel elements as the backend model.
249 // TODO(johnniwinther): Replace this with a strategy based on the J-element
250 // model.
251 class KernelBackendStrategy implements BackendStrategy {
252 final Compiler _compiler;
253
254 KernelBackendStrategy(this._compiler);
255
256 @override
257 ClosedWorldRefiner createClosedWorldRefiner(KernelClosedWorld closedWorld) {
258 return closedWorld;
259 }
260
261 @override
262 Sorter get sorter =>
263 throw new UnimplementedError('KernelBackendStrategy.sorter');
264
265 @override
266 void convertClosures(ClosedWorldRefiner closedWorldRefiner) {
267 // TODO(johnniwinther,efortuna): Compute closure classes for kernel based
268 // elements.
269 }
270
271 @override
272 WorkItemBuilder createCodegenWorkItemBuilder(ClosedWorld closedWorld) {
273 return new KernelCodegenWorkItemBuilder(_compiler.backend, closedWorld);
274 }
275
276 @override
277 CodegenWorldBuilder createCodegenWorldBuilder(
278 NativeBasicData nativeBasicData,
279 ClosedWorld closedWorld,
280 SelectorConstraintsStrategy selectorConstraintsStrategy) {
281 return new KernelCodegenWorldBuilder(_compiler.elementEnvironment,
282 nativeBasicData, closedWorld, selectorConstraintsStrategy);
283 }
284
285 @override
286 SsaBuilderTask createSsaBuilderTask(JavaScriptBackend backend,
287 SourceInformationStrategy sourceInformationStrategy) {
288 return new KernelSsaBuilderTask(backend.compiler);
289 }
290 }
291
292 class MirrorsCodegenAnalysisImpl implements MirrorsCodegenAnalysis { 239 class MirrorsCodegenAnalysisImpl implements MirrorsCodegenAnalysis {
293 @override 240 @override
294 int get preMirrorsMethodCount { 241 int get preMirrorsMethodCount {
295 throw new UnimplementedError( 242 throw new UnimplementedError(
296 'MirrorsCodegenAnalysisImpl.preMirrorsMethodCount'); 243 'MirrorsCodegenAnalysisImpl.preMirrorsMethodCount');
297 } 244 }
298 245
299 @override 246 @override
300 void onQueueEmpty(Enqueuer enqueuer, Iterable<ClassEntity> recentClasses) { 247 void onQueueEmpty(Enqueuer enqueuer, Iterable<ClassEntity> recentClasses) {
301 throw new UnimplementedError('MirrorsCodegenAnalysisImpl.onQueueEmpty'); 248 throw new UnimplementedError('MirrorsCodegenAnalysisImpl.onQueueEmpty');
302 } 249 }
303 } 250 }
304
305 class KernelCodegenWorkItemBuilder implements WorkItemBuilder {
306 final JavaScriptBackend _backend;
307 final ClosedWorld _closedWorld;
308
309 KernelCodegenWorkItemBuilder(this._backend, this._closedWorld);
310
311 @override
312 CodegenWorkItem createWorkItem(MemberEntity entity) {
313 return new KernelCodegenWorkItem(_backend, _closedWorld, entity);
314 }
315 }
316
317 class KernelCodegenWorkItem extends CodegenWorkItem {
318 final JavaScriptBackend _backend;
319 final ClosedWorld _closedWorld;
320 final MemberEntity element;
321 final CodegenRegistry registry;
322
323 KernelCodegenWorkItem(this._backend, this._closedWorld, this.element)
324 : registry = new CodegenRegistry(element);
325
326 @override
327 WorldImpact run() {
328 return _backend.codegen(this, _closedWorld);
329 }
330 }
331
332 /// Task for building SSA from kernel IR loaded from .dill.
333 class KernelSsaBuilderTask extends CompilerTask implements SsaBuilderTask {
334 final Compiler _compiler;
335
336 KernelSsaBuilderTask(this._compiler) : super(_compiler.measurer);
337
338 KernelToElementMap get _elementMap {
339 KernelFrontEndStrategy frontEndStrategy = _compiler.frontEndStrategy;
340 return frontEndStrategy.elementMap;
341 }
342
343 @override
344 HGraph build(CodegenWorkItem work, ClosedWorld closedWorld) {
345 KernelSsaBuilder builder = new KernelSsaBuilder(
346 work.element,
347 _compiler,
348 _elementMap,
349 closedWorld,
350 work.registry,
351 const SourceInformationBuilder(),
352 null);
353 return builder.build();
354 }
355 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698