Skip to content

Commit e43a7ef

Browse files
committed
simplify parse_prefix_range_expr
1 parent 8456c40 commit e43a7ef

File tree

1 file changed

+13
-18
lines changed

1 file changed

+13
-18
lines changed

src/librustc_parse/parser/expr.rs

+13-18
Original file line numberDiff line numberDiff line change
@@ -406,10 +406,7 @@ impl<'a> Parser<'a> {
406406
}
407407

408408
/// Parses prefix-forms of range notation: `..expr`, `..`, `..=expr`.
409-
fn parse_prefix_range_expr(
410-
&mut self,
411-
already_parsed_attrs: Option<AttrVec>,
412-
) -> PResult<'a, P<Expr>> {
409+
fn parse_prefix_range_expr(&mut self, attrs: Option<AttrVec>) -> PResult<'a, P<Expr>> {
413410
// Check for deprecated `...` syntax.
414411
if self.token == token::DotDotDot {
415412
self.err_dotdotdot_syntax(self.token.span);
@@ -420,25 +417,23 @@ impl<'a> Parser<'a> {
420417
"parse_prefix_range_expr: token {:?} is not DotDot/DotDotEq",
421418
self.token
422419
);
423-
let tok = self.token.clone();
424-
let attrs = self.parse_or_use_outer_attributes(already_parsed_attrs)?;
420+
421+
let limits = match self.token.kind {
422+
token::DotDot => RangeLimits::HalfOpen,
423+
_ => RangeLimits::Closed,
424+
};
425+
let op = AssocOp::from_token(&self.token);
426+
let attrs = self.parse_or_use_outer_attributes(attrs)?;
425427
let lo = self.token.span;
426-
let mut hi = self.token.span;
427428
self.bump();
428-
let opt_end = if self.is_at_start_of_range_notation_rhs() {
429+
let (span, opt_end) = if self.is_at_start_of_range_notation_rhs() {
429430
// RHS must be parsed with more associativity than the dots.
430-
let next_prec = AssocOp::from_token(&tok).unwrap().precedence() + 1;
431-
Some(self.parse_assoc_expr_with(next_prec, LhsExpr::NotYetParsed).map(|x| {
432-
hi = x.span;
433-
x
434-
})?)
431+
self.parse_assoc_expr_with(op.unwrap().precedence() + 1, LhsExpr::NotYetParsed)
432+
.map(|x| (lo.to(x.span), Some(x)))?
435433
} else {
436-
None
434+
(lo, None)
437435
};
438-
let limits = if tok == token::DotDot { RangeLimits::HalfOpen } else { RangeLimits::Closed };
439-
440-
let r = self.mk_range(None, opt_end, limits)?;
441-
Ok(self.mk_expr(lo.to(hi), r, attrs))
436+
Ok(self.mk_expr(span, self.mk_range(None, opt_end, limits)?, attrs))
442437
}
443438

444439
/// Parses a prefix-unary-operator expr.

0 commit comments

Comments
 (0)