Skip to content

Commit 4af7c64

Browse files
committed
more cleanup
1 parent 53688ad commit 4af7c64

File tree

1 file changed

+69
-59
lines changed

1 file changed

+69
-59
lines changed

src/libsyntax/parse/parser.rs

Lines changed: 69 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1456,96 +1456,105 @@ pub impl Parser {
14561456
return self.mk_expr(lo, hi, ex);
14571457
}
14581458
1459-
1459+
// parse an expression of binops
14601460
fn parse_binops() -> @expr {
1461-
return self.parse_more_binops(self.parse_prefix_expr(), 0);
1461+
self.parse_more_binops(self.parse_prefix_expr(), 0)
14621462
}
14631463
1464+
// parse an expression of binops of at least min_prec precedence
14641465
fn parse_more_binops(lhs: @expr, min_prec: uint) ->
14651466
@expr {
14661467
if self.expr_is_complete(lhs) { return lhs; }
14671468
let peeked = self.token;
14681469
if peeked == token::BINOP(token::OR) &&
14691470
(self.restriction == RESTRICT_NO_BAR_OP ||
14701471
self.restriction == RESTRICT_NO_BAR_OR_DOUBLEBAR_OP) {
1471-
return lhs;
1472-
}
1473-
if peeked == token::OROR &&
1472+
lhs
1473+
} else if peeked == token::OROR &&
14741474
self.restriction == RESTRICT_NO_BAR_OR_DOUBLEBAR_OP {
1475-
return lhs;
1476-
}
1477-
let cur_opt = token_to_binop(peeked);
1478-
match cur_opt {
1479-
Some(cur_op) => {
1480-
let cur_prec = operator_prec(cur_op);
1481-
if cur_prec > min_prec {
1482-
self.bump();
1483-
let expr = self.parse_prefix_expr();
1484-
let rhs = self.parse_more_binops(expr, cur_prec);
1485-
self.get_id(); // see ast_util::op_expr_callee_id
1486-
let bin = self.mk_expr(lhs.span.lo, rhs.span.hi,
1487-
expr_binary(cur_op, lhs, rhs));
1488-
return self.parse_more_binops(bin, min_prec);
1475+
lhs
1476+
} else {
1477+
let cur_opt = token_to_binop(peeked);
1478+
match cur_opt {
1479+
Some(cur_op) => {
1480+
let cur_prec = operator_prec(cur_op);
1481+
if cur_prec > min_prec {
1482+
self.bump();
1483+
let expr = self.parse_prefix_expr();
1484+
let rhs = self.parse_more_binops(expr, cur_prec);
1485+
self.get_id(); // see ast_util::op_expr_callee_id
1486+
let bin = self.mk_expr(lhs.span.lo, rhs.span.hi,
1487+
expr_binary(cur_op, lhs, rhs));
1488+
self.parse_more_binops(bin, min_prec)
1489+
} else {
1490+
lhs
1491+
}
1492+
}
1493+
None => {
1494+
if as_prec > min_prec && self.eat_keyword(~"as") {
1495+
let rhs = self.parse_ty(true);
1496+
let _as = self.mk_expr(lhs.span.lo,
1497+
rhs.span.hi,
1498+
expr_cast(lhs, rhs));
1499+
self.parse_more_binops(_as, min_prec)
1500+
} else {
1501+
lhs
1502+
}
1503+
}
14891504
}
1490-
}
1491-
_ => ()
1492-
}
1493-
if as_prec > min_prec && self.eat_keyword(~"as") {
1494-
let rhs = self.parse_ty(true);
1495-
let _as =
1496-
self.mk_expr(lhs.span.lo, rhs.span.hi, expr_cast(lhs, rhs));
1497-
return self.parse_more_binops(_as, min_prec);
14981505
}
1499-
return lhs;
15001506
}
15011507
1502-
// parse an arbitrary expression.
1508+
// parse an assignment expression....
1509+
// actually, this seems to be the main entry point for
1510+
// parsing an arbitrary expression.
15031511
fn parse_assign_expr() -> @expr {
15041512
let lo = self.span.lo;
15051513
let lhs = self.parse_binops();
15061514
match copy self.token {
1507-
token::EQ => {
1508-
self.bump();
1509-
let rhs = self.parse_expr();
1510-
return self.mk_expr(lo, rhs.span.hi, expr_assign(lhs, rhs));
1515+
token::EQ => {
1516+
self.bump();
1517+
let rhs = self.parse_expr();
1518+
self.mk_expr(lo, rhs.span.hi, expr_assign(lhs, rhs))
15111519
}
15121520
token::BINOPEQ(op) => {
1513-
self.bump();
1514-
let rhs = self.parse_expr();
1515-
let mut aop;
1516-
match op {
1517-
token::PLUS => aop = add,
1518-
token::MINUS => aop = subtract,
1519-
token::STAR => aop = mul,
1520-
token::SLASH => aop = div,
1521-
token::PERCENT => aop = rem,
1522-
token::CARET => aop = bitxor,
1523-
token::AND => aop = bitand,
1524-
token::OR => aop = bitor,
1525-
token::SHL => aop = shl,
1526-
token::SHR => aop = shr
1527-
}
1528-
self.get_id(); // see ast_util::op_expr_callee_id
1529-
return self.mk_expr(lo, rhs.span.hi,
1530-
expr_assign_op(aop, lhs, rhs));
1521+
self.bump();
1522+
let rhs = self.parse_expr();
1523+
let mut aop;
1524+
match op {
1525+
token::PLUS => aop = add,
1526+
token::MINUS => aop = subtract,
1527+
token::STAR => aop = mul,
1528+
token::SLASH => aop = div,
1529+
token::PERCENT => aop = rem,
1530+
token::CARET => aop = bitxor,
1531+
token::AND => aop = bitand,
1532+
token::OR => aop = bitor,
1533+
token::SHL => aop = shl,
1534+
token::SHR => aop = shr
1535+
}
1536+
self.get_id(); // see ast_util::op_expr_callee_id
1537+
self.mk_expr(lo, rhs.span.hi,
1538+
expr_assign_op(aop, lhs, rhs))
15311539
}
15321540
token::LARROW => {
15331541
self.obsolete(copy self.span, ObsoleteBinaryMove);
15341542
// Bogus value (but it's an error)
15351543
self.bump(); // <-
15361544
self.bump(); // rhs
15371545
self.bump(); // ;
1538-
return self.mk_expr(lo, self.span.hi,
1539-
expr_break(None));
1546+
self.mk_expr(lo, self.span.hi,
1547+
expr_break(None))
15401548
}
15411549
token::DARROW => {
15421550
self.bump();
15431551
let rhs = self.parse_expr();
1544-
return self.mk_expr(lo, rhs.span.hi, expr_swap(lhs, rhs));
1552+
self.mk_expr(lo, rhs.span.hi, expr_swap(lhs, rhs))
1553+
}
1554+
_ => {
1555+
lhs
15451556
}
1546-
_ => {/* fall through */ }
15471557
}
1548-
return lhs;
15491558
}
15501559
15511560
fn parse_if_expr() -> @expr {
@@ -1560,7 +1569,7 @@ pub impl Parser {
15601569
hi = elexpr.span.hi;
15611570
}
15621571
let q = {cond: cond, then: thn, els: els, lo: lo, hi: hi};
1563-
return self.mk_expr(q.lo, q.hi, expr_if(q.cond, q.then, q.els));
1572+
f.mk_expr(q.lo, q.hi, expr_if(q.cond, q.then, q.els))
15641573
}
15651574
15661575
fn parse_fn_expr(proto: Proto) -> @expr {
@@ -1571,8 +1580,9 @@ pub impl Parser {
15711580
let decl = self.parse_fn_decl(|p| p.parse_arg_or_capture_item());
15721581
15731582
let body = self.parse_block();
1574-
return self.mk_expr(lo, body.span.hi,
1575-
expr_fn(proto, decl, body, @()));
1583+
1584+
self.mk_expr(lo, body.span.hi,
1585+
expr_fn(proto, decl, body, capture_clause));
15761586
}
15771587
15781588
// `|args| { ... }` like in `do` expressions

0 commit comments

Comments
 (0)