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

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

Issue 2954463002: Refactoring to prepare for kernel based jump targets (Closed)
Patch Set: Updated cf. comments Created 3 years, 5 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.backend_strategy; 5 library dart2js.kernel.backend_strategy;
6 6
7 import 'package:kernel/ast.dart' as ir; 7 import 'package:kernel/ast.dart' as ir;
8 8
9 import '../backend_strategy.dart'; 9 import '../backend_strategy.dart';
10 import '../closure.dart'; 10 import '../closure.dart';
(...skipping 26 matching lines...) Expand all
37 import 'element_map_impl.dart'; 37 import 'element_map_impl.dart';
38 import 'kernel_strategy.dart'; 38 import 'kernel_strategy.dart';
39 39
40 /// A backend strategy based on Kernel IR nodes. 40 /// A backend strategy based on Kernel IR nodes.
41 abstract class KernelBackendStrategy implements BackendStrategy { 41 abstract class KernelBackendStrategy implements BackendStrategy {
42 KernelToElementMap get elementMap; 42 KernelToElementMap get elementMap;
43 GlobalLocalsMap get globalLocalsMapForTesting; 43 GlobalLocalsMap get globalLocalsMapForTesting;
44 } 44 }
45 45
46 /// Backend strategy that uses the kernel elements as the backend model. 46 /// Backend strategy that uses the kernel elements as the backend model.
47 // TODO(johnniwinther): Replace this with a strategy based on the J-element 47 // TODO(redemption): Replace this with a strategy based on the J-element
48 // model. 48 // model.
49 class KernelBackendStrategyImpl implements KernelBackendStrategy { 49 class KernelBackendStrategyImpl implements KernelBackendStrategy {
50 final Compiler _compiler; 50 final Compiler _compiler;
51 Sorter _sorter; 51 Sorter _sorter;
52 ClosureConversionTask _closureDataLookup; 52 ClosureConversionTask _closureDataLookup;
53 final GlobalLocalsMap _globalLocalsMap = new GlobalLocalsMap(); 53 final GlobalLocalsMap _globalLocalsMap = new GlobalLocalsMap();
54 54
55 KernelBackendStrategyImpl(this._compiler); 55 KernelBackendStrategyImpl(this._compiler);
56 56
57 KernelToElementMap get elementMap { 57 KernelToElementMap get elementMap {
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 work.element.enclosingClass, 166 work.element.enclosingClass,
167 _elementMap.getMemberNode(work.element), 167 _elementMap.getMemberNode(work.element),
168 _compiler, 168 _compiler,
169 _elementMap, 169 _elementMap,
170 new KernelToTypeInferenceMapImpl(closedWorld), 170 new KernelToTypeInferenceMapImpl(closedWorld),
171 localsMap, 171 localsMap,
172 closedWorld, 172 closedWorld,
173 _compiler.codegenWorldBuilder, 173 _compiler.codegenWorldBuilder,
174 work.registry, 174 work.registry,
175 _compiler.backendStrategy.closureDataLookup, 175 _compiler.backendStrategy.closureDataLookup,
176 // TODO(johnniwinther): Support these: 176 // TODO(redemption): Support these:
177 const SourceInformationBuilder(), 177 const SourceInformationBuilder(),
178 null, // Function node used as capture scope id. 178 null, // Function node used as capture scope id.
179 targetIsConstructorBody: false); 179 targetIsConstructorBody: false);
180 return builder.build(); 180 return builder.build();
181 } 181 }
182 } 182 }
183 183
184 class KernelToTypeInferenceMapImpl implements KernelToTypeInferenceMap { 184 class KernelToTypeInferenceMapImpl implements KernelToTypeInferenceMap {
185 final ClosedWorld _closedWorld; 185 final ClosedWorld _closedWorld;
186 186
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 _members.add(member); 291 _members.add(member);
292 } 292 }
293 293
294 @override 294 @override
295 void leaveInlinedMember(MemberEntity member) { 295 void leaveInlinedMember(MemberEntity member) {
296 assert(member == currentMember); 296 assert(member == currentMember);
297 _members.removeLast(); 297 _members.removeLast();
298 } 298 }
299 299
300 @override 300 @override
301 JumpTarget getJumpTarget(ir.TreeNode node, {bool isContinueTarget: false}) { 301 JumpTarget getJumpTargetForBreak(ir.BreakStatement node) {
302 // TODO(johnniwinther): Support jump targets. 302 throw new UnimplementedError('KernelToLocalsMapImpl.getJumpTargetForBreak');
303 }
304
305 @override
306 JumpTarget getJumpTargetForContinueSwitch(ir.ContinueSwitchStatement node) {
307 throw new UnimplementedError(
308 'KernelToLocalsMapImpl.getJumpTargetForContinueSwitch');
309 }
310
311 @override
312 JumpTarget getJumpTargetForSwitchCase(ir.SwitchCase node) {
313 throw new UnimplementedError(
314 'KernelToLocalsMapImpl.getJumpTargetForSwitchCase');
315 }
316
317 @override
318 JumpTarget getJumpTargetForDo(ir.DoStatement node) {
319 // TODO(redemption): Support do statement as jump target.
303 return null; 320 return null;
304 } 321 }
305 322
323 @override
324 JumpTarget getJumpTargetForLabel(ir.LabeledStatement node) {
325 throw new UnimplementedError('KernelToLocalsMapImpl.getJumpTargetForLabel');
326 }
327
328 @override
329 JumpTarget getJumpTargetForSwitch(ir.SwitchStatement node) {
330 throw new UnimplementedError(
331 'KernelToLocalsMapImpl.getJumpTargetForSwitch');
332 }
333
334 @override
335 JumpTarget getJumpTargetForFor(ir.ForStatement node) {
336 // TODO(redemption): Support for statement as jump target.
337 return null;
338 }
339
340 @override
341 JumpTarget getJumpTargetForForIn(ir.ForInStatement node) {
342 // TODO(redemption): Support for-in statement as jump target.
343 return null;
344 }
345
346 @override
347 JumpTarget getJumpTargetForWhile(ir.WhileStatement node) {
348 // TODO(redemption): Support while statement as jump target.
349 return null;
350 }
351
306 @override 352 @override
307 Local getLocal(ir.VariableDeclaration node) { 353 Local getLocal(ir.VariableDeclaration node) {
308 return _map.putIfAbsent(node, () { 354 return _map.putIfAbsent(node, () {
309 return new KLocal(node.name, currentMember); 355 return new KLocal(node.name, currentMember);
310 }); 356 });
311 } 357 }
312 358
313 @override 359 @override
314 LoopClosureRepresentationInfo getClosureRepresentationInfoForLoop( 360 LoopClosureRepresentationInfo getClosureRepresentationInfoForLoop(
315 ClosureDataLookup closureLookup, ir.TreeNode node) { 361 ClosureDataLookup closureLookup, ir.TreeNode node) {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 Iterable<ClassEntity> sortClasses(Iterable<ClassEntity> classes) { 427 Iterable<ClassEntity> sortClasses(Iterable<ClassEntity> classes) {
382 return classes.toList() 428 return classes.toList()
383 ..sort((ClassEntity a, ClassEntity b) { 429 ..sort((ClassEntity a, ClassEntity b) {
384 int r = _compareLibraries(a.library, b.library); 430 int r = _compareLibraries(a.library, b.library);
385 if (r != 0) return r; 431 if (r != 0) return r;
386 return _compareNodes( 432 return _compareNodes(
387 a, elementMap.getClassNode(a), b, elementMap.getClassNode(b)); 433 a, elementMap.getClassNode(a), b, elementMap.getClassNode(b));
388 }); 434 });
389 } 435 }
390 } 436 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/kernel/element_map_impl.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