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 '../closure.dart'; | 7 import '../closure.dart'; |
8 import '../backend_strategy.dart'; | 8 import '../backend_strategy.dart'; |
9 import '../common.dart'; | 9 import '../common.dart'; |
10 import '../common_elements.dart'; | 10 import '../common_elements.dart'; |
11 import '../common/backend_api.dart'; | 11 import '../common/backend_api.dart'; |
12 import '../common/codegen.dart' show CodegenWorkItem; | 12 import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem; |
13 import '../common/resolution.dart'; | 13 import '../common/resolution.dart'; |
14 import '../common/tasks.dart'; | 14 import '../common/tasks.dart'; |
15 import '../common/work.dart'; | 15 import '../common/work.dart'; |
16 import '../elements/elements.dart'; | 16 import '../elements/elements.dart'; |
17 import '../elements/entities.dart'; | 17 import '../elements/entities.dart'; |
18 import '../elements/types.dart'; | 18 import '../elements/types.dart'; |
19 import '../environment.dart' as env; | 19 import '../environment.dart' as env; |
20 import '../enqueue.dart'; | 20 import '../enqueue.dart'; |
21 import '../frontend_strategy.dart'; | 21 import '../frontend_strategy.dart'; |
22 import '../js_backend/backend.dart'; | 22 import '../js_backend/backend.dart'; |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 void registerTypeLiteral(DartType type) {} | 224 void registerTypeLiteral(DartType type) {} |
225 } | 225 } |
226 | 226 |
227 /// Mock implementation of [MirrorsResolutionAnalysis]. | 227 /// Mock implementation of [MirrorsResolutionAnalysis]. |
228 class MirrorsResolutionAnalysisImpl implements MirrorsResolutionAnalysis { | 228 class MirrorsResolutionAnalysisImpl implements MirrorsResolutionAnalysis { |
229 @override | 229 @override |
230 void onQueueEmpty(Enqueuer enqueuer, Iterable<ClassEntity> recentClasses) {} | 230 void onQueueEmpty(Enqueuer enqueuer, Iterable<ClassEntity> recentClasses) {} |
231 | 231 |
232 @override | 232 @override |
233 MirrorsCodegenAnalysis close() { | 233 MirrorsCodegenAnalysis close() { |
234 throw new UnimplementedError('MirrorsResolutionAnalysisImpl.close'); | 234 // TODO(johnniwinther): Implement this. |
| 235 return new MirrorsCodegenAnalysisImpl(); |
235 } | 236 } |
236 | 237 |
237 @override | 238 @override |
238 void onResolutionComplete() {} | 239 void onResolutionComplete() {} |
239 } | 240 } |
240 | 241 |
241 /// Backend strategy that uses the kernel elements as the backend model. | 242 /// Backend strategy that uses the kernel elements as the backend model. |
242 // TODO(johnniwinther): Replace this with a strategy based on the J-element | 243 // TODO(johnniwinther): Replace this with a strategy based on the J-element |
243 // model. | 244 // model. |
244 class KernelBackendStrategy implements BackendStrategy { | 245 class KernelBackendStrategy implements BackendStrategy { |
245 @override | 246 @override |
246 ClosedWorldRefiner createClosedWorldRefiner(KernelClosedWorld closedWorld) { | 247 ClosedWorldRefiner createClosedWorldRefiner(KernelClosedWorld closedWorld) { |
247 return closedWorld; | 248 return closedWorld; |
248 } | 249 } |
249 | 250 |
250 @override | 251 @override |
251 Sorter get sorter => | 252 Sorter get sorter => |
252 throw new UnimplementedError('KernelBackendStrategy.sorter'); | 253 throw new UnimplementedError('KernelBackendStrategy.sorter'); |
253 | 254 |
254 @override | 255 @override |
255 void convertClosures(ClosedWorldRefiner closedWorldRefiner) { | 256 void convertClosures(ClosedWorldRefiner closedWorldRefiner) { |
256 // TODO(johnniwinther,efortuna): Compute closure classes for kernel based | 257 // TODO(johnniwinther,efortuna): Compute closure classes for kernel based |
257 // elements. | 258 // elements. |
258 throw new UnimplementedError('KernelBackendStrategy.createClosureClasses'); | |
259 } | 259 } |
260 | 260 |
261 @override | 261 @override |
262 WorkItemBuilder createCodegenWorkItemBuilder(ClosedWorld closedWorld) { | 262 WorkItemBuilder createCodegenWorkItemBuilder(ClosedWorld closedWorld) { |
263 return new KernelCodegenWorkItemBuilder(); | 263 return new KernelCodegenWorkItemBuilder(); |
264 } | 264 } |
265 | 265 |
266 @override | 266 @override |
267 CodegenWorldBuilder createCodegenWorldBuilder( | 267 CodegenWorldBuilder createCodegenWorldBuilder( |
268 NativeBasicData nativeBasicData, | 268 NativeBasicData nativeBasicData, |
269 ClosedWorld closedWorld, | 269 ClosedWorld closedWorld, |
270 SelectorConstraintsStrategy selectorConstraintsStrategy) { | 270 SelectorConstraintsStrategy selectorConstraintsStrategy) { |
271 return new KernelCodegenWorldBuilder( | 271 return new KernelCodegenWorldBuilder( |
272 null, nativeBasicData, closedWorld, selectorConstraintsStrategy); | 272 null, nativeBasicData, closedWorld, selectorConstraintsStrategy); |
273 } | 273 } |
274 } | 274 } |
275 | 275 |
| 276 class MirrorsCodegenAnalysisImpl implements MirrorsCodegenAnalysis { |
| 277 @override |
| 278 int get preMirrorsMethodCount { |
| 279 throw new UnimplementedError( |
| 280 'MirrorsCodegenAnalysisImpl.preMirrorsMethodCount'); |
| 281 } |
| 282 |
| 283 @override |
| 284 void onQueueEmpty(Enqueuer enqueuer, Iterable<ClassEntity> recentClasses) { |
| 285 throw new UnimplementedError('MirrorsCodegenAnalysisImpl.onQueueEmpty'); |
| 286 } |
| 287 } |
| 288 |
276 class KernelCodegenWorkItemBuilder implements WorkItemBuilder { | 289 class KernelCodegenWorkItemBuilder implements WorkItemBuilder { |
277 @override | 290 @override |
278 CodegenWorkItem createWorkItem(MemberEntity entity) { | 291 CodegenWorkItem createWorkItem(MemberEntity entity) { |
279 throw new UnimplementedError('KernelCodegenWorkItemBuilder.createWorkItem'); | 292 return new KernelCodegenWorkItem(entity); |
280 } | 293 } |
281 } | 294 } |
| 295 |
| 296 class KernelCodegenWorkItem extends CodegenWorkItem { |
| 297 final MemberEntity element; |
| 298 final CodegenRegistry registry; |
| 299 |
| 300 KernelCodegenWorkItem(this.element) : registry = new CodegenRegistry(element); |
| 301 |
| 302 @override |
| 303 WorldImpact run() { |
| 304 // TODO(johnniwinther): Build SSA graph from kernel and run codegen on it. |
| 305 return const WorldImpact(); |
| 306 } |
| 307 } |
OLD | NEW |