Chromium Code Reviews| 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.js_model.locals; | 5 library dart2js.js_model.locals; |
| 6 | 6 |
| 7 import 'package:kernel/ast.dart' as ir; | 7 import 'package:kernel/ast.dart' as ir; |
| 8 | 8 |
| 9 import '../closure.dart'; | 9 import '../closure.dart'; |
| 10 import '../common.dart'; | 10 import '../common.dart'; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 84 @override | 84 @override |
| 85 JumpTarget getJumpTargetForSwitchCase(ir.SwitchCase node) { | 85 JumpTarget getJumpTargetForSwitchCase(ir.SwitchCase node) { |
| 86 _ensureJumpMap(node); | 86 _ensureJumpMap(node); |
| 87 throw new UnimplementedError( | 87 throw new UnimplementedError( |
| 88 'KernelToLocalsMapImpl.getJumpTargetForSwitchCase'); | 88 'KernelToLocalsMapImpl.getJumpTargetForSwitchCase'); |
| 89 } | 89 } |
| 90 | 90 |
| 91 @override | 91 @override |
| 92 JumpTarget getJumpTargetForDo(ir.DoStatement node) { | 92 JumpTarget getJumpTargetForDo(ir.DoStatement node) { |
| 93 _ensureJumpMap(node); | 93 _ensureJumpMap(node); |
| 94 return _jumpTargetMap[node.parent]; | 94 return _jumpTargetMap[node]; |
| 95 } | 95 } |
| 96 | 96 |
| 97 @override | 97 @override |
| 98 JumpTarget getJumpTargetForLabel(ir.LabeledStatement node) { | 98 JumpTarget getJumpTargetForLabel(ir.LabeledStatement node) { |
| 99 _ensureJumpMap(node); | 99 _ensureJumpMap(node); |
| 100 return _jumpTargetMap[node]; | 100 return _jumpTargetMap[node]; |
| 101 } | 101 } |
| 102 | 102 |
| 103 @override | 103 @override |
| 104 JumpTarget getJumpTargetForSwitch(ir.SwitchStatement node) { | 104 JumpTarget getJumpTargetForSwitch(ir.SwitchStatement node) { |
| 105 _ensureJumpMap(node); | 105 _ensureJumpMap(node); |
| 106 throw new UnimplementedError( | 106 return _jumpTargetMap[node]; |
| 107 'KernelToLocalsMapImpl.getJumpTargetForSwitch'); | |
| 108 } | 107 } |
| 109 | 108 |
| 110 @override | 109 @override |
| 111 JumpTarget getJumpTargetForFor(ir.ForStatement node) { | 110 JumpTarget getJumpTargetForFor(ir.ForStatement node) { |
| 112 _ensureJumpMap(node); | 111 _ensureJumpMap(node); |
| 113 return _jumpTargetMap[node]; | 112 return _jumpTargetMap[node]; |
| 114 } | 113 } |
| 115 | 114 |
| 116 @override | 115 @override |
| 117 JumpTarget getJumpTargetForForIn(ir.ForInStatement node) { | 116 JumpTarget getJumpTargetForForIn(ir.ForInStatement node) { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 151 JJumpTarget _getJumpTarget(ir.TreeNode node) { | 150 JJumpTarget _getJumpTarget(ir.TreeNode node) { |
| 152 return jumpTargetMap.putIfAbsent(node, () { | 151 return jumpTargetMap.putIfAbsent(node, () { |
| 153 return new JJumpTarget(member, index++); | 152 return new JJumpTarget(member, index++); |
| 154 }); | 153 }); |
| 155 } | 154 } |
| 156 | 155 |
| 157 @override | 156 @override |
| 158 defaultNode(ir.Node node) => node.visitChildren(this); | 157 defaultNode(ir.Node node) => node.visitChildren(this); |
| 159 | 158 |
| 160 bool _canBeBreakTarget(ir.TreeNode node) { | 159 bool _canBeBreakTarget(ir.TreeNode node) { |
| 161 // TODO(johnniwinther): Add more. | 160 // TODO(johnniwinther): Add more. |
|
Siggi Cherem (dart-lang)
2017/06/30 18:16:21
anything more to add for break?
Johnni Winther
2017/06/30 19:16:55
No. Removed.
| |
| 162 return node is ir.ForStatement || | 161 return node is ir.ForStatement || |
| 163 node is ir.ForInStatement || | 162 node is ir.ForInStatement || |
| 164 node is ir.WhileStatement; | 163 node is ir.WhileStatement || |
| 164 node is ir.DoStatement || | |
|
Siggi Cherem (dart-lang)
2017/06/30 18:16:21
I thought you said there was more to this than jus
Johnni Winther
2017/06/30 19:16:55
The problem was that continue in do requires a lab
| |
| 165 node is ir.SwitchStatement; | |
| 165 } | 166 } |
| 166 | 167 |
| 167 bool _canBeContinueTarget(ir.TreeNode node) { | 168 bool _canBeContinueTarget(ir.TreeNode node) { |
| 168 // TODO(johnniwinther): Add more. | 169 // TODO(johnniwinther): Add more. |
|
Siggi Cherem (dart-lang)
2017/06/30 18:16:21
here we are missing continue to switch-case, corre
Johnni Winther
2017/06/30 19:16:55
That's the only one.
| |
| 169 return node is ir.ForStatement || | 170 return node is ir.ForStatement || |
| 170 node is ir.ForInStatement || | 171 node is ir.ForInStatement || |
| 171 node is ir.WhileStatement; | 172 node is ir.WhileStatement || |
| 173 node is ir.DoStatement; | |
| 172 } | 174 } |
| 173 | 175 |
| 174 @override | 176 @override |
| 175 visitBreakStatement(ir.BreakStatement node) { | 177 visitBreakStatement(ir.BreakStatement node) { |
| 176 // TODO(johnniwinther): Add labels if the enclosing loop is not the implicit | 178 // TODO(johnniwinther): Add labels if the enclosing loop is not the implicit |
| 177 // break target. | 179 // break target. |
| 178 JJumpTarget target; | 180 JJumpTarget target; |
| 179 ir.TreeNode body = node.target.body; | 181 ir.TreeNode body = node.target.body; |
| 180 ir.TreeNode parent = node.target.parent; | 182 ir.TreeNode parent = node.target.parent; |
| 181 if (_canBeBreakTarget(body)) { | 183 if (_canBeBreakTarget(body)) { |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 269 sb.write(memberContext.enclosingClass.name); | 271 sb.write(memberContext.enclosingClass.name); |
| 270 sb.write('.'); | 272 sb.write('.'); |
| 271 } | 273 } |
| 272 sb.write(memberContext.name); | 274 sb.write(memberContext.name); |
| 273 sb.write('#'); | 275 sb.write('#'); |
| 274 sb.write(name); | 276 sb.write(name); |
| 275 sb.write(')'); | 277 sb.write(')'); |
| 276 return sb.toString(); | 278 return sb.toString(); |
| 277 } | 279 } |
| 278 } | 280 } |
| OLD | NEW |