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.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 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
364 | 364 |
365 @override | 365 @override |
366 JumpTarget getJumpTargetForFor(ir.ForStatement node) { | 366 JumpTarget getJumpTargetForFor(ir.ForStatement node) { |
367 _ensureJumpMap(node); | 367 _ensureJumpMap(node); |
368 return _jumpTargetMap[node]; | 368 return _jumpTargetMap[node]; |
369 } | 369 } |
370 | 370 |
371 @override | 371 @override |
372 JumpTarget getJumpTargetForForIn(ir.ForInStatement node) { | 372 JumpTarget getJumpTargetForForIn(ir.ForInStatement node) { |
373 _ensureJumpMap(node); | 373 _ensureJumpMap(node); |
374 return _jumpTargetMap[node.parent]; | 374 return _jumpTargetMap[node]; |
375 } | 375 } |
376 | 376 |
377 @override | 377 @override |
378 JumpTarget getJumpTargetForWhile(ir.WhileStatement node) { | 378 JumpTarget getJumpTargetForWhile(ir.WhileStatement node) { |
379 _ensureJumpMap(node); | 379 _ensureJumpMap(node); |
380 return _jumpTargetMap[node.parent]; | 380 return _jumpTargetMap[node]; |
381 } | 381 } |
382 | 382 |
383 @override | 383 @override |
384 Local getLocal(ir.VariableDeclaration node) { | 384 Local getLocal(ir.VariableDeclaration node) { |
385 return _map.putIfAbsent(node, () { | 385 return _map.putIfAbsent(node, () { |
386 return new KLocal(node.name, currentMember); | 386 return new KLocal(node.name, currentMember); |
387 }); | 387 }); |
388 } | 388 } |
389 | 389 |
390 @override | 390 @override |
(...skipping 16 matching lines...) Expand all Loading... | |
407 return jumpTargetMap.putIfAbsent(node, () { | 407 return jumpTargetMap.putIfAbsent(node, () { |
408 return new KJumpTarget(member, index++); | 408 return new KJumpTarget(member, index++); |
409 }); | 409 }); |
410 } | 410 } |
411 | 411 |
412 @override | 412 @override |
413 defaultNode(ir.Node node) => node.visitChildren(this); | 413 defaultNode(ir.Node node) => node.visitChildren(this); |
414 | 414 |
415 bool _canBeBreakTarget(ir.TreeNode node) { | 415 bool _canBeBreakTarget(ir.TreeNode node) { |
416 // TODO(johnniwinther): Add more. | 416 // TODO(johnniwinther): Add more. |
417 return node is ir.ForStatement; | 417 return node is ir.ForStatement || |
418 node is ir.ForInStatement || | |
419 node is ir.WhileStatement || | |
420 node is ir.DoStatement; | |
Siggi Cherem (dart-lang)
2017/06/26 17:25:28
remove this `.parent` in getJumpTargetForDo as wel
Johnni Winther
2017/06/27 09:02:12
Removed. Do statements are not handled yet.
| |
418 } | 421 } |
419 | 422 |
420 bool _canBeContinueTarget(ir.TreeNode node) { | 423 bool _canBeContinueTarget(ir.TreeNode node) { |
421 // TODO(johnniwinther): Add more. | 424 // TODO(johnniwinther): Add more. |
422 return node is ir.ForStatement; | 425 return node is ir.ForStatement || |
426 node is ir.ForInStatement || | |
427 node is ir.WhileStatement || | |
428 node is ir.DoStatement; | |
423 } | 429 } |
424 | 430 |
425 @override | 431 @override |
426 visitBreakStatement(ir.BreakStatement node) { | 432 visitBreakStatement(ir.BreakStatement node) { |
427 // TODO(johnniwinther): Add labels if the enclosing loop is not the implicit | 433 // TODO(johnniwinther): Add labels if the enclosing loop is not the implicit |
428 // break target. | 434 // break target. |
429 KJumpTarget target; | 435 KJumpTarget target; |
430 ir.TreeNode body = node.target.body; | 436 ir.TreeNode body = node.target.body; |
431 ir.TreeNode parent = node.target.parent; | 437 ir.TreeNode parent = node.target.parent; |
432 if (_canBeBreakTarget(body)) { | 438 if (_canBeBreakTarget(body)) { |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
568 Iterable<ClassEntity> sortClasses(Iterable<ClassEntity> classes) { | 574 Iterable<ClassEntity> sortClasses(Iterable<ClassEntity> classes) { |
569 return classes.toList() | 575 return classes.toList() |
570 ..sort((ClassEntity a, ClassEntity b) { | 576 ..sort((ClassEntity a, ClassEntity b) { |
571 int r = _compareLibraries(a.library, b.library); | 577 int r = _compareLibraries(a.library, b.library); |
572 if (r != 0) return r; | 578 if (r != 0) return r; |
573 return _compareNodes( | 579 return _compareNodes( |
574 a, elementMap.getClassNode(a), b, elementMap.getClassNode(b)); | 580 a, elementMap.getClassNode(a), b, elementMap.getClassNode(b)); |
575 }); | 581 }); |
576 } | 582 } |
577 } | 583 } |
OLD | NEW |