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

Side by Side Diff: pkg/compiler/lib/src/js_model/js_strategy.dart

Issue 2929643002: Introduce JsStrategy skeleton (Closed)
Patch Set: Updated cf. comments Created 3 years, 6 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
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library dart2js.js_model.strategy;
6
7 import '../backend_strategy.dart';
8 import '../common_elements.dart';
9 import '../compiler.dart';
10 import '../elements/entities.dart';
11 import '../enqueue.dart';
12 import '../io/source_information.dart';
13 import '../js_emitter/sorter.dart';
14 import '../js/js_source_mapping.dart';
15 import '../js_backend/backend.dart';
16 import '../js_backend/backend_usage.dart';
17 import '../js_backend/constant_system_javascript.dart';
18 import '../js_backend/interceptor_data.dart';
19 import '../js_backend/native_data.dart';
20 import '../kernel/kernel_backend_strategy.dart';
21 import '../ssa/ssa.dart';
22 import '../universe/class_set.dart';
23 import '../universe/world_builder.dart';
24 import '../world.dart';
25 import 'elements.dart';
26
27 class JsBackendStrategy implements BackendStrategy {
28 final Compiler _compiler;
29 final JsToFrontendMap _map = new JsToFrontendMap();
30
31 JsBackendStrategy(this._compiler);
32
33 @override
34 ClosedWorldRefiner createClosedWorldRefiner(ClosedWorld closedWorld) {
35 CommonElements commonElements =
36 new JsCommonElements(_map, closedWorld.commonElements);
37 BackendUsage backendUsage =
38 new JsBackendUsage(_map, closedWorld.backendUsage);
39 NativeData nativeData = new JsNativeData(_map, closedWorld.nativeData);
40 InterceptorData interceptorData = new InterceptorDataImpl(
41 nativeData,
42 commonElements,
43 // TODO(johnniwinther): Convert these.
44 const {},
45 new Set(),
46 new Set());
47
48 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes =
49 <ClassEntity, ClassHierarchyNode>{};
50 Map<ClassEntity, ClassSet> classSets = <ClassEntity, ClassSet>{};
51 Set<ClassEntity> implementedClasses = new Set<ClassEntity>();
52
53 ClassHierarchyNode convertClassHierarchyNode(ClassHierarchyNode node) {
54 ClassEntity cls = _map.toBackendClass(node.cls);
55 if (closedWorld.isImplemented(node.cls)) {
56 implementedClasses.add(cls);
57 }
58 ClassHierarchyNode newNode = classHierarchyNodes.putIfAbsent(cls, () {
59 ClassHierarchyNode parentNode;
60 if (node.parentNode != null) {
61 parentNode = convertClassHierarchyNode(node.parentNode);
62 }
63 return new ClassHierarchyNode(parentNode, cls, node.hierarchyDepth);
64 });
65 newNode.isAbstractlyInstantiated = node.isAbstractlyInstantiated;
66 newNode.isDirectlyInstantiated = node.isDirectlyInstantiated;
67 return newNode;
68 }
69
70 ClassSet convertClassSet(ClassSet classSet) {
71 ClassEntity cls = _map.toBackendClass(classSet.cls);
72 return classSets.putIfAbsent(cls, () {
73 ClassHierarchyNode newNode = convertClassHierarchyNode(classSet.node);
74 ClassSet newClassSet = new ClassSet(newNode);
75 for (ClassHierarchyNode subtype in classSet.subtypeNodes) {
76 ClassHierarchyNode newSubtype = convertClassHierarchyNode(subtype);
77 newClassSet.addSubtype(newSubtype);
78 }
79 return newClassSet;
80 });
81 }
82
83 closedWorld
84 .getClassHierarchyNode(closedWorld.commonElements.objectClass)
85 .forEachSubclass((ClassEntity cls) {
86 convertClassSet(closedWorld.getClassSet(cls));
87 }, ClassHierarchyNode.ALL);
88
89 return new JsClosedWorld(
90 commonElements: commonElements,
91 constantSystem: const JavaScriptConstantSystem(),
92 backendUsage: backendUsage,
93 nativeData: nativeData,
94 interceptorData: interceptorData,
95 classHierarchyNodes: classHierarchyNodes,
96 classSets: classSets,
97 implementedClasses: implementedClasses,
98 // TODO(johnniwinther): Support this.
99 allTypedefs: const []);
100 }
101
102 @override
103 Sorter get sorter {
104 throw new UnimplementedError('JsBackendStrategy.sorter');
105 }
106
107 @override
108 void convertClosures(ClosedWorldRefiner closedWorldRefiner) {}
109
110 @override
111 SourceInformationStrategy get sourceInformationStrategy =>
112 const JavaScriptSourceInformationStrategy();
113
114 @override
115 SsaBuilderTask createSsaBuilderTask(JavaScriptBackend backend,
116 SourceInformationStrategy sourceInformationStrategy) {
117 return new KernelSsaBuilderTask(backend.compiler);
118 }
119
120 @override
121 WorkItemBuilder createCodegenWorkItemBuilder(ClosedWorld closedWorld) {
122 return new KernelCodegenWorkItemBuilder(_compiler.backend, closedWorld);
123 }
124
125 @override
126 CodegenWorldBuilder createCodegenWorldBuilder(
127 NativeBasicData nativeBasicData,
128 ClosedWorld closedWorld,
129 SelectorConstraintsStrategy selectorConstraintsStrategy) {
130 return new KernelCodegenWorldBuilder(_compiler.elementEnvironment,
131 nativeBasicData, closedWorld, selectorConstraintsStrategy);
132 }
133 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_model/elements.dart ('k') | pkg/compiler/lib/src/kernel/element_map_impl.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698