rollup merge of #20720: nick29581/assoc-ice-missing

This commit is contained in:
Alex Crichton
2015-01-07 17:38:03 -08:00
3 changed files with 105 additions and 22 deletions

View File

@@ -2535,7 +2535,7 @@ impl<'a> Parser<'a> {
}
// expr[...]
// An index expression.
// Could be either an index expression or a slicing expression.
token::OpenDelim(token::Bracket) => {
let bracket_pos = self.span.lo;
self.bump();
@@ -2575,22 +2575,6 @@ impl<'a> Parser<'a> {
"use `&expr[]` to construct a slice of the whole of expr");
}
}
// A range expression, either `expr..expr` or `expr..`.
token::DotDot if !self.restrictions.contains(RESTRICTION_NO_DOTS) => {
self.bump();
let opt_end = if self.token.can_begin_expr() {
let end = self.parse_expr_res(RESTRICTION_NO_DOTS);
Some(end)
} else {
None
};
let hi = self.span.hi;
let range = self.mk_range(Some(e), opt_end);
return self.mk_expr(lo, hi, range);
}
_ => return e
}
}
@@ -2833,7 +2817,7 @@ impl<'a> Parser<'a> {
token::DotDot if !self.restrictions.contains(RESTRICTION_NO_DOTS) => {
// A range, closed above: `..expr`.
self.bump();
let e = self.parse_prefix_expr();
let e = self.parse_expr();
hi = e.span.hi;
ex = self.mk_range(None, Some(e));
}
@@ -2900,6 +2884,7 @@ impl<'a> Parser<'a> {
self.restrictions.contains(RESTRICTION_NO_BAR_OP) {
return lhs;
}
self.expected_tokens.push(TokenType::Operator);
let cur_opt = self.token.to_binop();
@@ -2991,6 +2976,23 @@ impl<'a> Parser<'a> {
let assign_op = self.mk_assign_op(aop, lhs, rhs);
self.mk_expr(span.lo, rhs_span.hi, assign_op)
}
// A range expression, either `expr..expr` or `expr..`.
token::DotDot if !self.restrictions.contains(RESTRICTION_NO_DOTS) => {
self.bump();
let opt_end = if self.token.can_begin_expr() {
let end = self.parse_expr_res(RESTRICTION_NO_DOTS);
Some(end)
} else {
None
};
let lo = lhs.span.lo;
let hi = self.span.hi;
let range = self.mk_range(Some(lhs), opt_end);
return self.mk_expr(lo, hi, range);
}
_ => {
lhs
}