diff options
| author | Brian Anderson <[email protected]> | 2011-01-31 23:06:02 -0500 |
|---|---|---|
| committer | Brian Anderson <[email protected]> | 2011-02-01 00:08:47 -0500 |
| commit | 3fedb18c0af0bd9fa5e4973936003c0b57e4d3e8 (patch) | |
| tree | 69adf95963fda1fedd3338d30f095f73d1c37c77 /src/comp/front/parser.rs | |
| parent | Merge branch 'master' into forgraydon-elseif (diff) | |
| download | rust-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.rs | 19 |
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)); } } } |