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

Side by Side Diff: pkg/compiler/lib/src/js_model/locals.dart

Issue 2965763002: Support break in switch and break/continue in do statements (Closed)
Patch Set: 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
« no previous file with comments | « no previous file | tests/compiler/dart2js/kernel/compile_from_dill_test_helper.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.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
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
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
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 }
OLDNEW
« no previous file with comments | « no previous file | tests/compiler/dart2js/kernel/compile_from_dill_test_helper.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698