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

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

Issue 3003283003: Handle missing break in last switch case (Closed)
Patch Set: Created 3 years, 4 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 | pkg/compiler/lib/src/ssa/builder_kernel.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 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 target = _getJumpTarget(parent); 253 target = _getJumpTarget(parent);
254 target.isContinueTarget = true; 254 target.isContinueTarget = true;
255 breaksAsContinue.add(node); 255 breaksAsContinue.add(node);
256 } else { 256 } else {
257 target = _getJumpTarget(node.target); 257 target = _getJumpTarget(node.target);
258 target.isBreakTarget = true; 258 target.isBreakTarget = true;
259 } 259 }
260 jumpTargetMap[node] = target; 260 jumpTargetMap[node] = target;
261 super.visitBreakStatement(node); 261 super.visitBreakStatement(node);
262 } 262 }
263
264 @override
265 visitSwitchStatement(ir.SwitchStatement node) {
266 node.expression.accept(this);
267 if (node.cases.isNotEmpty && !node.cases.last.isDefault) {
268 // Ensure that [node] has a corresponding target. We generate a break in
269 // case of a missing break on the last case if it isn't a default case.
270 _getJumpTarget(node);
271 }
272 super.visitSwitchStatement(node);
273 }
263 } 274 }
264 275
265 class JJumpTarget extends JumpTarget<ir.Node> { 276 class JJumpTarget extends JumpTarget<ir.Node> {
266 final MemberEntity memberContext; 277 final MemberEntity memberContext;
267 final int nestingLevel; 278 final int nestingLevel;
268 List<LabelDefinition<ir.Node>> _labels; 279 List<LabelDefinition<ir.Node>> _labels;
269 280
270 JJumpTarget(this.memberContext, this.nestingLevel); 281 JJumpTarget(this.memberContext, this.nestingLevel);
271 282
272 bool isBreakTarget = false; 283 bool isBreakTarget = false;
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 sb.write(memberContext.enclosingClass.name); 376 sb.write(memberContext.enclosingClass.name);
366 sb.write('.'); 377 sb.write('.');
367 } 378 }
368 sb.write(memberContext.name); 379 sb.write(memberContext.name);
369 sb.write('#'); 380 sb.write('#');
370 sb.write(name); 381 sb.write(name);
371 sb.write(')'); 382 sb.write(')');
372 return sb.toString(); 383 return sb.toString();
373 } 384 }
374 } 385 }
OLDNEW
« no previous file with comments | « no previous file | pkg/compiler/lib/src/ssa/builder_kernel.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698