Skip to content

Commit cdf82ba

Browse files
committed
---
yaml --- r: 1324 b: refs/heads/master c: c848ed1 h: refs/heads/master v: v3
1 parent 864640b commit cdf82ba

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 784b2decf2ce4233a022cf221b1ec744b755c3ed
2+
refs/heads/master: c848ed1e9862a527e0a6f16ef235b41f98baa419

trunk/src/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,7 @@ TEST_XFAILS_RUSTC := $(filter-out \
447447
div-mod.rs \
448448
drop-bind-thunk-args.rs \
449449
drop-on-ret.rs \
450+
else-if.rs \
450451
fact.rs \
451452
fn-lval.rs \
452453
fun-call-variants.rs \

trunk/src/comp/front/parser.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -895,8 +895,7 @@ impure fn parse_if_expr(parser p) -> @ast.expr {
895895
hi = thn.span;
896896
alt (p.peek()) {
897897
case (token.ELSE) {
898-
p.bump();
899-
auto eblk = parse_block(p);
898+
auto eblk = parse_else_block(p);
900899
els = some(eblk);
901900
hi = eblk.span;
902901
}
@@ -905,6 +904,21 @@ impure fn parse_if_expr(parser p) -> @ast.expr {
905904
ret @spanned(lo, hi, ast.expr_if(cond, thn, els, ast.ann_none));
906905
}
907906

907+
impure fn parse_else_block(parser p) -> ast.block {
908+
expect(p, token.ELSE);
909+
alt (p.peek()) {
910+
case (token.IF) {
911+
let vec[@ast.stmt] stmts = vec();
912+
auto ifexpr = parse_if_expr(p);
913+
auto bloc = index_block(stmts, some(ifexpr));
914+
ret spanned(ifexpr.span, ifexpr.span, bloc);
915+
}
916+
case (_) {
917+
ret parse_block(p);
918+
}
919+
}
920+
}
921+
908922
impure fn parse_head_local(parser p) -> @ast.decl {
909923
auto lo = p.get_span();
910924
let @ast.local local;

0 commit comments

Comments
 (0)