Skip to content

Commit 20b5ca3

Browse files
committed
syntax: Merge parse_for_expr, parse_do_expr
1 parent a8235ff commit 20b5ca3

File tree

1 file changed

+6
-22
lines changed

1 file changed

+6
-22
lines changed

src/libsyntax/parse/parser.rs

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -771,9 +771,9 @@ class parser {
771771
} else if self.eat_keyword("if") {
772772
ret pexpr(self.parse_if_expr());
773773
} else if self.eat_keyword("for") {
774-
ret pexpr(self.parse_for_expr());
774+
ret pexpr(self.parse_sugary_call_expr("for", expr_loop_body));
775775
} else if self.eat_keyword("do") {
776-
ret pexpr(self.parse_do_expr());
776+
ret pexpr(self.parse_sugary_call_expr("do", expr_do_body));
777777
} else if self.eat_keyword("while") {
778778
ret pexpr(self.parse_while_expr());
779779
} else if self.eat_keyword("loop") {
@@ -1283,36 +1283,20 @@ class parser {
12831283
}
12841284
}
12851285

1286-
fn parse_for_expr() -> @expr {
1286+
fn parse_sugary_call_expr(keyword: str, ctor: fn(+@expr) -> expr_) -> @expr {
12871287
let lo = self.last_span;
12881288
let call = self.parse_expr_res(RESTRICT_STMT_EXPR);
12891289
alt call.node {
12901290
expr_call(f, args, true) {
12911291
let b_arg = vec::last(args);
12921292
let last = self.mk_expr(b_arg.span.lo, b_arg.span.hi,
1293-
expr_loop_body(b_arg));
1293+
ctor(b_arg));
12941294
@{node: expr_call(f, vec::init(args) + [last], true)
12951295
with *call}
12961296
}
12971297
_ {
1298-
self.span_fatal(lo, "`for` must be followed by a block call");
1299-
}
1300-
}
1301-
}
1302-
1303-
fn parse_do_expr() -> @expr {
1304-
let lo = self.last_span;
1305-
let call = self.parse_expr_res(RESTRICT_STMT_EXPR);
1306-
alt call.node {
1307-
expr_call(f, args, true) {
1308-
let b_arg = vec::last(args);
1309-
let last = self.mk_expr(b_arg.span.lo, b_arg.span.hi,
1310-
expr_do_body(b_arg));
1311-
@{node: expr_call(f, vec::init(args) + [last], true)
1312-
with *call}
1313-
}
1314-
_ {
1315-
self.span_fatal(lo, "`do` must be followed by a block call");
1298+
self.span_fatal(
1299+
lo, #fmt("`%s` must be followed by a block call", keyword));
13161300
}
13171301
}
13181302
}

0 commit comments

Comments
 (0)