aboutsummaryrefslogtreecommitdiff
path: root/src/comp/front/parser.rs
diff options
context:
space:
mode:
authorBrian Anderson <[email protected]>2011-01-31 23:06:02 -0500
committerBrian Anderson <[email protected]>2011-02-01 00:08:47 -0500
commit3fedb18c0af0bd9fa5e4973936003c0b57e4d3e8 (patch)
tree69adf95963fda1fedd3338d30f095f73d1c37c77 /src/comp/front/parser.rs
parentMerge branch 'master' into forgraydon-elseif (diff)
downloadrust-3fedb18c0af0bd9fa5e4973936003c0b57e4d3e8.tar.xz
rust-3fedb18c0af0bd9fa5e4973936003c0b57e4d3e8.zip
Allow the else part of an expr_if to be either expr_if or expr_block
Diffstat (limited to 'src/comp/front/parser.rs')
-rw-r--r--src/comp/front/parser.rs19
1 files changed, 9 insertions, 10 deletions
diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs
index fbed877f..e629683c 100644
--- a/src/comp/front/parser.rs
+++ b/src/comp/front/parser.rs
@@ -891,30 +891,29 @@ impure fn parse_if_expr(parser p) -> @ast.expr {
auto cond = parse_expr(p);
expect(p, token.RPAREN);
auto thn = parse_block(p);
- let option.t[ast.block] els = none[ast.block];
+ let option.t[@ast.expr] els = none[@ast.expr];
hi = thn.span;
alt (p.peek()) {
case (token.ELSE) {
- auto eblk = parse_else_block(p);
- els = some(eblk);
- hi = eblk.span;
+ auto elexpr = parse_else_expr(p);
+ els = some(elexpr);
+ hi = elexpr.span;
}
case (_) { /* fall through */ }
}
ret @spanned(lo, hi, ast.expr_if(cond, thn, els, ast.ann_none));
}
-impure fn parse_else_block(parser p) -> ast.block {
+impure fn parse_else_expr(parser p) -> @ast.expr {
expect(p, token.ELSE);
alt (p.peek()) {
case (token.IF) {
- let vec[@ast.stmt] stmts = vec();
- auto ifexpr = parse_if_expr(p);
- auto bloc = index_block(stmts, some(ifexpr));
- ret spanned(ifexpr.span, ifexpr.span, bloc);
+ ret parse_if_expr(p);
}
case (_) {
- ret parse_block(p);
+ auto blk = parse_block(p);
+ ret @spanned(blk.span, blk.span,
+ ast.expr_block(blk, ast.ann_none));
}
}
}