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

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

Issue 2905623002: Extract type inference queries from KernelAstAdapter to KernelToTypeInferenceMap (Closed)
Patch Set: 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.kernel.backend_strategy;
6
7 import 'package:kernel/ast.dart' as ir;
8
9 import '../backend_strategy.dart';
10 import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem;
11 import '../common/tasks.dart';
12 import '../compiler.dart';
13 import '../elements/entities.dart';
14 import '../enqueue.dart';
15 import '../io/source_information.dart';
16 import '../js_backend/backend.dart';
17 import '../js_backend/native_data.dart';
18 import '../js_emitter/sorter.dart';
19 import '../kernel/element_map.dart';
20 import '../native/behavior.dart';
21 import '../ssa/builder_kernel.dart';
22 import '../ssa/nodes.dart';
23 import '../ssa/ssa.dart';
24 import '../ssa/types.dart';
25 import '../types/types.dart';
26 import '../universe/selector.dart';
27 import '../universe/world_builder.dart';
28 import '../universe/world_impact.dart';
29 import '../world.dart';
30 import 'kernel_strategy.dart';
31
32 /// Backend strategy that uses the kernel elements as the backend model.
33 // TODO(johnniwinther): Replace this with a strategy based on the J-element
34 // model.
35 class KernelBackendStrategy implements BackendStrategy {
36 final Compiler _compiler;
37
38 KernelBackendStrategy(this._compiler);
39
40 @override
41 ClosedWorldRefiner createClosedWorldRefiner(KernelClosedWorld closedWorld) {
42 return closedWorld;
43 }
44
45 @override
46 Sorter get sorter =>
47 throw new UnimplementedError('KernelBackendStrategy.sorter');
48
49 @override
50 void convertClosures(ClosedWorldRefiner closedWorldRefiner) {
51 // TODO(johnniwinther,efortuna): Compute closure classes for kernel based
52 // elements.
53 }
54
55 @override
56 WorkItemBuilder createCodegenWorkItemBuilder(ClosedWorld closedWorld) {
57 return new KernelCodegenWorkItemBuilder(_compiler.backend, closedWorld);
58 }
59
60 @override
61 CodegenWorldBuilder createCodegenWorldBuilder(
62 NativeBasicData nativeBasicData,
63 ClosedWorld closedWorld,
64 SelectorConstraintsStrategy selectorConstraintsStrategy) {
65 return new KernelCodegenWorldBuilder(_compiler.elementEnvironment,
66 nativeBasicData, closedWorld, selectorConstraintsStrategy);
67 }
68
69 @override
70 SsaBuilderTask createSsaBuilderTask(JavaScriptBackend backend,
71 SourceInformationStrategy sourceInformationStrategy) {
72 return new KernelSsaBuilderTask(backend.compiler);
73 }
74 }
75
76 class KernelCodegenWorkItemBuilder implements WorkItemBuilder {
77 final JavaScriptBackend _backend;
78 final ClosedWorld _closedWorld;
79
80 KernelCodegenWorkItemBuilder(this._backend, this._closedWorld);
81
82 @override
83 CodegenWorkItem createWorkItem(MemberEntity entity) {
84 return new KernelCodegenWorkItem(_backend, _closedWorld, entity);
85 }
86 }
87
88 class KernelCodegenWorkItem extends CodegenWorkItem {
89 final JavaScriptBackend _backend;
90 final ClosedWorld _closedWorld;
91 final MemberEntity element;
92 final CodegenRegistry registry;
93
94 KernelCodegenWorkItem(this._backend, this._closedWorld, this.element)
95 : registry = new CodegenRegistry(element);
96
97 @override
98 WorldImpact run() {
99 return _backend.codegen(this, _closedWorld);
100 }
101 }
102
103 /// Task for building SSA from kernel IR loaded from .dill.
104 class KernelSsaBuilderTask extends CompilerTask implements SsaBuilderTask {
105 final Compiler _compiler;
106
107 KernelSsaBuilderTask(this._compiler) : super(_compiler.measurer);
108
109 KernelToElementMap get _elementMap {
110 KernelFrontEndStrategy frontEndStrategy = _compiler.frontEndStrategy;
111 return frontEndStrategy.elementMap;
112 }
113
114 @override
115 HGraph build(CodegenWorkItem work, ClosedWorld closedWorld) {
116 KernelSsaBuilder builder = new KernelSsaBuilder(
117 work.element,
118 _compiler,
119 _elementMap,
120 new KernelToTypeInferenceMapImpl(closedWorld),
121 closedWorld,
122 work.registry,
123 const SourceInformationBuilder(),
124 null);
125 return builder.build();
126 }
127 }
128
129 class KernelToTypeInferenceMapImpl implements KernelToTypeInferenceMap {
130 final ClosedWorld _closedWorld;
131
132 KernelToTypeInferenceMapImpl(this._closedWorld);
133
134 @override
135 TypeMask typeFromNativeBehavior(
136 NativeBehavior nativeBehavior, ClosedWorld closedWorld) {
137 return TypeMaskFactory.fromNativeBehavior(nativeBehavior, closedWorld);
138 }
139
140 @override
141 TypeMask selectorTypeOf(Selector selector, TypeMask mask) {
142 return _closedWorld.commonMasks.dynamicType;
Siggi Cherem (dart-lang) 2017/05/24 17:18:28 \o/ We should rename `dynamic` to `awesome`, then
Johnni Winther 2017/05/29 07:50:53 Acknowledged.
143 }
144
145 @override
146 TypeMask getInferredTypeOf(MemberEntity member) {
147 return _closedWorld.commonMasks.dynamicType;
148 }
149
150 @override
151 TypeMask inferredIndexType(ir.ForInStatement forInStatement) {
152 return _closedWorld.commonMasks.dynamicType;
153 }
154
155 @override
156 bool isJsIndexableIterator(
157 ir.ForInStatement forInStatement, ClosedWorld closedWorld) {
158 return false;
159 }
160
161 @override
162 TypeMask typeOfIteratorMoveNext(ir.ForInStatement forInStatement) {
163 return _closedWorld.commonMasks.dynamicType;
164 }
165
166 @override
167 TypeMask typeOfIteratorCurrent(ir.ForInStatement forInStatement) {
168 return _closedWorld.commonMasks.dynamicType;
169 }
170
171 @override
172 TypeMask typeOfIterator(ir.ForInStatement forInStatement) {
173 return _closedWorld.commonMasks.dynamicType;
174 }
175
176 @override
177 TypeMask typeOfListLiteral(
178 MemberEntity owner, ir.ListLiteral listLiteral, ClosedWorld closedWorld) {
179 return _closedWorld.commonMasks.dynamicType;
180 }
181
182 @override
183 TypeMask typeOfSet(ir.PropertySet write, ClosedWorld closedWorld) {
184 return _closedWorld.commonMasks.dynamicType;
185 }
186
187 @override
188 TypeMask typeOfGet(ir.PropertyGet read) {
189 return _closedWorld.commonMasks.dynamicType;
190 }
191
192 @override
193 TypeMask typeOfInvocation(
194 ir.MethodInvocation invocation, ClosedWorld closedWorld) {
195 return _closedWorld.commonMasks.dynamicType;
196 }
197
198 @override
199 TypeMask getReturnTypeOf(FunctionEntity function) {
200 return _closedWorld.commonMasks.dynamicType;
201 }
202 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/kernel/element_map.dart ('k') | pkg/compiler/lib/src/kernel/kernel_strategy.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698