Skip to content

Commit 7e9a2fe

Browse files
committed
Add support for labeled while loops.
1 parent cf1381c commit 7e9a2fe

File tree

21 files changed

+96
-24
lines changed

21 files changed

+96
-24
lines changed

src/librustc/lint/builtin.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ impl LintPass for WhileTrue {
5959

6060
fn check_expr(&mut self, cx: &Context, e: &ast::Expr) {
6161
match e.node {
62-
ast::ExprWhile(cond, _) => {
62+
ast::ExprWhile(cond, _, _) => {
6363
match cond.node {
6464
ast::ExprLit(lit) => {
6565
match lit.node {
@@ -1057,7 +1057,7 @@ impl LintPass for UnnecessaryParens {
10571057
fn check_expr(&mut self, cx: &Context, e: &ast::Expr) {
10581058
let (value, msg, struct_lit_needs_parens) = match e.node {
10591059
ast::ExprIf(cond, _, _) => (cond, "`if` condition", true),
1060-
ast::ExprWhile(cond, _) => (cond, "`while` condition", true),
1060+
ast::ExprWhile(cond, _, _) => (cond, "`while` condition", true),
10611061
ast::ExprMatch(head, _) => (head, "`match` head expression", true),
10621062
ast::ExprRet(Some(value)) => (value, "`return` value", false),
10631063
ast::ExprAssign(_, value) => (value, "assigned value", false),

src/librustc/middle/cfg/construct.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ impl<'a> CFGBuilder<'a> {
225225
self.add_node(expr.id, [then_exit, else_exit]) // 4, 5
226226
}
227227

228-
ast::ExprWhile(ref cond, ref body) => {
228+
ast::ExprWhile(ref cond, ref body, _) => {
229229
//
230230
// [pred]
231231
// |

src/librustc/middle/check_loop.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ impl<'a> Visitor<Context> for CheckLoopVisitor<'a> {
3535

3636
fn visit_expr(&mut self, e: &ast::Expr, cx:Context) {
3737
match e.node {
38-
ast::ExprWhile(ref e, ref b) => {
38+
ast::ExprWhile(ref e, ref b, _) => {
3939
self.visit_expr(&**e, cx);
4040
self.visit_block(&**b, Loop);
4141
}

src/librustc/middle/expr_use_visitor.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ impl<'d,'t,TYPER:mc::Typer> ExprUseVisitor<'d,'t,TYPER> {
391391
self.walk_block(&**blk);
392392
}
393393

394-
ast::ExprWhile(ref cond_expr, ref blk) => {
394+
ast::ExprWhile(ref cond_expr, ref blk, _) => {
395395
self.consume_expr(&**cond_expr);
396396
self.walk_block(&**blk);
397397
}

src/librustc/middle/liveness.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1017,7 +1017,7 @@ impl<'a> Liveness<'a> {
10171017
self.propagate_through_expr(&**cond, ln)
10181018
}
10191019

1020-
ExprWhile(ref cond, ref blk) => {
1020+
ExprWhile(ref cond, ref blk, _) => {
10211021
self.propagate_through_loop(expr,
10221022
WhileLoop(cond.clone()),
10231023
&**blk,

src/librustc/middle/region.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,7 @@ fn resolve_expr(visitor: &mut RegionResolutionVisitor,
521521
visitor.region_maps.mark_as_terminating_scope(body.id);
522522
}
523523

524-
ast::ExprWhile(expr, body) => {
524+
ast::ExprWhile(expr, body, _) => {
525525
visitor.region_maps.mark_as_terminating_scope(expr.id);
526526
visitor.region_maps.mark_as_terminating_scope(body.id);
527527
}

src/librustc/middle/resolve.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5313,7 +5313,7 @@ impl<'a> Resolver<'a> {
53135313
visit::walk_expr(self, expr, ());
53145314
}
53155315

5316-
ExprLoop(_, Some(label)) => {
5316+
ExprLoop(_, Some(label)) | ExprWhile(_, _, Some(label)) => {
53175317
self.with_label_rib(|this| {
53185318
let def_like = DlDef(DefLabel(expr.id));
53195319

src/librustc/middle/trans/debuginfo.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3570,7 +3570,7 @@ fn populate_scope_map(cx: &CrateContext,
35703570
}
35713571
}
35723572

3573-
ast::ExprWhile(ref cond_exp, ref loop_body) => {
3573+
ast::ExprWhile(ref cond_exp, ref loop_body, _) => {
35743574
walk_expr(cx, &**cond_exp, scope_stack, scope_map);
35753575

35763576
with_new_scope(cx,

src/librustc/middle/trans/expr.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -662,7 +662,7 @@ fn trans_rvalue_stmt_unadjusted<'a>(bcx: &'a Block<'a>,
662662
ast::ExprRet(ex) => {
663663
controlflow::trans_ret(bcx, ex)
664664
}
665-
ast::ExprWhile(ref cond, ref body) => {
665+
ast::ExprWhile(ref cond, ref body, _) => {
666666
controlflow::trans_while(bcx, expr.id, &**cond, &**body)
667667
}
668668
ast::ExprForLoop(ref pat, ref head, ref body, _) => {

src/librustc/middle/typeck/check/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3333,7 +3333,7 @@ fn check_expr_with_unifier(fcx: &FnCtxt,
33333333
check_then_else(fcx, &**cond, &**then_blk, opt_else_expr.clone(),
33343334
id, expr.span, expected);
33353335
}
3336-
ast::ExprWhile(ref cond, ref body) => {
3336+
ast::ExprWhile(ref cond, ref body, _) => {
33373337
check_expr_has_type(fcx, &**cond, ty::mk_bool());
33383338
check_block_no_value(fcx, &**body);
33393339
let cond_ty = fcx.expr_ty(&**cond);

0 commit comments

Comments
 (0)