Skip to content

Commit

Permalink
Implemented eat_plus and used it in parsing parse_ty_param_bounds_com…
Browse files Browse the repository at this point in the history
…mon.
  • Loading branch information
Crazycolorz5 committed Jun 5, 2018
1 parent c610be9 commit 682033c
Showing 1 changed file with 22 additions and 1 deletion.
23 changes: 22 additions & 1 deletion src/libsyntax/parse/parser.rs
Expand Up @@ -880,6 +880,27 @@ impl<'a> Parser<'a> {
false
}
}

/// Expect and consume a `+`. if `+=` is seen, replace it with a `=`
/// and continue. If a `+` is not seen, return false.
///
/// This is using when token splitting += into +.
/// See issue 47856 for an example of when this may occur.
fn eat_plus(&mut self) -> bool {
self.expected_tokens.push(TokenType::Token(token::BinOp(token::Plus)));
match self.token {
token::BinOp(token::Plus) => {
self.bump();
true
}
token::BinOpEq(token::Plus) => {
let span = self.span.with_lo(self.span.lo() + BytePos(1));
self.bump_with(token::Eq, span);
true
}
_ => false,
}
}

/// Expect and consume an `&`. If `&&` is seen, replace it with a single
/// `&` and continue. If an `&` is not seen, signal an error.
Expand Down Expand Up @@ -4801,7 +4822,7 @@ impl<'a> Parser<'a> {
break
}

if !allow_plus || !self.eat(&token::BinOp(token::Plus)) {
if !allow_plus || !self.eat_plus() {
break
}
}
Expand Down

0 comments on commit 682033c

Please sign in to comment.