Move brace/if/for/while/do/alt/spawn exprs into bottom_expr rule.

This commit is contained in:
Graydon Hoare 2011-06-01 12:42:28 -07:00
parent 4eef7b613c
commit 2ef2bda276

View File

@ -771,6 +771,24 @@ fn parse_bottom_expr(&parser p) -> @ast::expr {
hi = p.get_hi_pos(); hi = p.get_hi_pos();
expect(p, token::RPAREN); expect(p, token::RPAREN);
ret @spanned(lo, hi, e.node); ret @spanned(lo, hi, e.node);
} else if (p.peek() == token::LBRACE) {
auto blk = parse_block(p);
ret @spanned(blk.span.lo, blk.span.hi,
ast::expr_block(blk, p.get_ann()));
} else if (eat_word(p, "if")) {
ret parse_if_expr(p);
} else if (eat_word(p, "for")) {
ret parse_for_expr(p);
} else if (eat_word(p, "while")) {
ret parse_while_expr(p);
} else if (eat_word(p, "do")) {
ret parse_do_while_expr(p);
} else if (eat_word(p, "alt")) {
ret parse_alt_expr(p);
} else if (eat_word(p, "spawn")) {
ret parse_spawn_expr(p);
} else if (eat_word(p, "tup")) { } else if (eat_word(p, "tup")) {
fn parse_elt(&parser p) -> ast::elt { fn parse_elt(&parser p) -> ast::elt {
auto m = parse_mutability(p); auto m = parse_mutability(p);
@ -1415,33 +1433,11 @@ fn parse_expr(&parser p) -> @ast::expr {
fn parse_expr_res(&parser p, restriction r) -> @ast::expr { fn parse_expr_res(&parser p, restriction r) -> @ast::expr {
auto old = p.get_restriction(); auto old = p.get_restriction();
p.restrict(r); p.restrict(r);
auto e = parse_expr_inner(p); auto e = parse_assign_expr(p);
p.restrict(old); p.restrict(old);
ret e; ret e;
} }
fn parse_expr_inner(&parser p) -> @ast::expr {
if (p.peek() == token::LBRACE) {
auto blk = parse_block(p);
ret @spanned(blk.span.lo, blk.span.hi,
ast::expr_block(blk, p.get_ann()));
} else if (eat_word(p, "if")) {
ret parse_if_expr(p);
} else if (eat_word(p, "for")) {
ret parse_for_expr(p);
} else if (eat_word(p, "while")) {
ret parse_while_expr(p);
} else if (eat_word(p, "do")) {
ret parse_do_while_expr(p);
} else if (eat_word(p, "alt")) {
ret parse_alt_expr(p);
} else if (eat_word(p, "spawn")) {
ret parse_spawn_expr(p);
} else {
ret parse_assign_expr(p);
}
}
fn parse_initializer(&parser p) -> option::t[ast::initializer] { fn parse_initializer(&parser p) -> option::t[ast::initializer] {
alt (p.peek()) { alt (p.peek()) {
case (token::EQ) { case (token::EQ) {