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

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

Issue 2937203002: Add J-elements (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
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.js_model.strategy; 5 library dart2js.js_model.strategy;
6 6
7 import '../backend_strategy.dart'; 7 import '../backend_strategy.dart';
8 import '../common/tasks.dart';
8 import '../common_elements.dart'; 9 import '../common_elements.dart';
9 import '../compiler.dart'; 10 import '../compiler.dart';
10 import '../elements/elements.dart' show TypedefElement; 11 import '../elements/elements.dart' show TypedefElement;
11 import '../elements/entities.dart'; 12 import '../elements/entities.dart';
12 import '../enqueue.dart'; 13 import '../enqueue.dart';
13 import '../io/source_information.dart'; 14 import '../io/source_information.dart';
14 import '../js_emitter/sorter.dart'; 15 import '../js_emitter/sorter.dart';
15 import '../js/js_source_mapping.dart'; 16 import '../js/js_source_mapping.dart';
16 import '../js_backend/backend.dart'; 17 import '../js_backend/backend.dart';
17 import '../js_backend/backend_usage.dart'; 18 import '../js_backend/backend_usage.dart';
18 import '../js_backend/constant_system_javascript.dart'; 19 import '../js_backend/constant_system_javascript.dart';
19 import '../js_backend/interceptor_data.dart'; 20 import '../js_backend/interceptor_data.dart';
20 import '../js_backend/native_data.dart'; 21 import '../js_backend/native_data.dart';
22 import '../kernel/element_map.dart';
23 import '../kernel/element_map_impl.dart';
21 import '../kernel/kernel_backend_strategy.dart'; 24 import '../kernel/kernel_backend_strategy.dart';
25 import '../kernel/kernel_strategy.dart';
22 import '../ssa/ssa.dart'; 26 import '../ssa/ssa.dart';
23 import '../universe/class_set.dart'; 27 import '../universe/class_set.dart';
24 import '../universe/world_builder.dart'; 28 import '../universe/world_builder.dart';
25 import '../util/emptyset.dart'; 29 import '../util/emptyset.dart';
26 import '../world.dart'; 30 import '../world.dart';
27 import 'elements.dart'; 31 import 'elements.dart';
28 32
29 class JsBackendStrategy implements BackendStrategy { 33 class JsBackendStrategy implements BackendStrategy {
30 final Compiler _compiler; 34 final Compiler _compiler;
31 final JsToFrontendMap _map = new JsToFrontendMap(); 35 final JsToFrontendMap _map = new JsToFrontendMapImpl();
36 ElementEnvironment _elementEnvironment;
37 CommonElements _commonElements;
32 38
33 JsBackendStrategy(this._compiler); 39 JsBackendStrategy(this._compiler);
34 40
35 @override 41 @override
36 ClosedWorldRefiner createClosedWorldRefiner(ClosedWorld closedWorld) { 42 ClosedWorldRefiner createClosedWorldRefiner(ClosedWorld closedWorld) {
37 CommonElements commonElements = 43 _elementEnvironment =
38 new JsCommonElements(_map, closedWorld.commonElements); 44 new JsElementEnvironment(_map, closedWorld.elementEnvironment);
45 _commonElements = new JsCommonElements(_map, closedWorld.commonElements);
39 BackendUsage backendUsage = 46 BackendUsage backendUsage =
40 new JsBackendUsage(_map, closedWorld.backendUsage); 47 new JsBackendUsage(_map, closedWorld.backendUsage);
41 NativeData nativeData = new JsNativeData(_map, closedWorld.nativeData); 48 NativeData nativeData = new JsNativeData(_map, closedWorld.nativeData);
42 InterceptorData interceptorData = new InterceptorDataImpl( 49 InterceptorData interceptorData = new InterceptorDataImpl(
43 nativeData, 50 nativeData,
44 commonElements, 51 _commonElements,
45 // TODO(johnniwinther): Convert these. 52 // TODO(johnniwinther): Convert these.
46 const {}, 53 const {},
47 new Set(), 54 new Set(),
48 new Set()); 55 new Set());
49 56
50 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes = 57 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes =
51 <ClassEntity, ClassHierarchyNode>{}; 58 <ClassEntity, ClassHierarchyNode>{};
52 Map<ClassEntity, ClassSet> classSets = <ClassEntity, ClassSet>{}; 59 Map<ClassEntity, ClassSet> classSets = <ClassEntity, ClassSet>{};
53 Set<ClassEntity> implementedClasses = new Set<ClassEntity>(); 60 Set<ClassEntity> implementedClasses = new Set<ClassEntity>();
54 61
(...skipping 27 matching lines...) Expand all
82 }); 89 });
83 } 90 }
84 91
85 closedWorld 92 closedWorld
86 .getClassHierarchyNode(closedWorld.commonElements.objectClass) 93 .getClassHierarchyNode(closedWorld.commonElements.objectClass)
87 .forEachSubclass((ClassEntity cls) { 94 .forEachSubclass((ClassEntity cls) {
88 convertClassSet(closedWorld.getClassSet(cls)); 95 convertClassSet(closedWorld.getClassSet(cls));
89 }, ClassHierarchyNode.ALL); 96 }, ClassHierarchyNode.ALL);
90 97
91 return new JsClosedWorld( 98 return new JsClosedWorld(
92 // TODO(johnniwinther): Create a JsElementEnvironment. 99 elementEnvironment: _elementEnvironment,
93 elementEnvironment: closedWorld.elementEnvironment, 100 commonElements: _commonElements,
94 commonElements: commonElements,
95 constantSystem: const JavaScriptConstantSystem(), 101 constantSystem: const JavaScriptConstantSystem(),
96 backendUsage: backendUsage, 102 backendUsage: backendUsage,
97 nativeData: nativeData, 103 nativeData: nativeData,
98 interceptorData: interceptorData, 104 interceptorData: interceptorData,
99 classHierarchyNodes: classHierarchyNodes, 105 classHierarchyNodes: classHierarchyNodes,
100 classSets: classSets, 106 classSets: classSets,
101 implementedClasses: implementedClasses, 107 implementedClasses: implementedClasses,
102 // TODO(johnniwinther): Support this. 108 // TODO(johnniwinther): Support this.
103 allTypedefs: new ImmutableEmptySet<TypedefElement>()); 109 allTypedefs: new ImmutableEmptySet<TypedefElement>());
104 } 110 }
105 111
106 @override 112 @override
107 Sorter get sorter { 113 Sorter get sorter {
108 throw new UnimplementedError('JsBackendStrategy.sorter'); 114 throw new UnimplementedError('JsBackendStrategy.sorter');
109 } 115 }
110 116
111 @override 117 @override
112 void convertClosures(ClosedWorldRefiner closedWorldRefiner) {} 118 void convertClosures(ClosedWorldRefiner closedWorldRefiner) {}
113 119
114 @override 120 @override
115 SourceInformationStrategy get sourceInformationStrategy => 121 SourceInformationStrategy get sourceInformationStrategy =>
116 const JavaScriptSourceInformationStrategy(); 122 const JavaScriptSourceInformationStrategy();
117 123
118 @override 124 @override
119 SsaBuilderTask createSsaBuilderTask(JavaScriptBackend backend, 125 SsaBuilder createSsaBuilder(CompilerTask task, JavaScriptBackend backend,
120 SourceInformationStrategy sourceInformationStrategy) { 126 SourceInformationStrategy sourceInformationStrategy) {
121 return new KernelSsaBuilderTask(backend.compiler); 127 KernelFrontEndStrategy strategy = backend.compiler.frontendStrategy;
128 KernelToElementMap elementMap = strategy.elementMap;
129 JsKernelToElementMap jsElementMap = new JsKernelToElementMap(
130 _map, _elementEnvironment, _commonElements, elementMap);
131 return new KernelSsaBuilder(task, backend.compiler, jsElementMap);
122 } 132 }
123 133
124 @override 134 @override
125 WorkItemBuilder createCodegenWorkItemBuilder(ClosedWorld closedWorld) { 135 WorkItemBuilder createCodegenWorkItemBuilder(ClosedWorld closedWorld) {
126 return new KernelCodegenWorkItemBuilder(_compiler.backend, closedWorld); 136 return new KernelCodegenWorkItemBuilder(_compiler.backend, closedWorld);
127 } 137 }
128 138
129 @override 139 @override
130 CodegenWorldBuilder createCodegenWorldBuilder( 140 CodegenWorldBuilder createCodegenWorldBuilder(
131 NativeBasicData nativeBasicData, 141 NativeBasicData nativeBasicData,
132 ClosedWorld closedWorld, 142 ClosedWorld closedWorld,
133 SelectorConstraintsStrategy selectorConstraintsStrategy) { 143 SelectorConstraintsStrategy selectorConstraintsStrategy) {
134 return new KernelCodegenWorldBuilder(closedWorld.elementEnvironment, 144 return new KernelCodegenWorldBuilder(closedWorld.elementEnvironment,
135 nativeBasicData, closedWorld, selectorConstraintsStrategy); 145 nativeBasicData, closedWorld, selectorConstraintsStrategy);
136 } 146 }
137 } 147 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_model/elements.dart ('k') | pkg/compiler/lib/src/kernel/element_map.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698