check double negation

This commit is contained in:
nx2k3 2023-02-27 13:25:03 +00:00
parent 13a741afac
commit 0883973d2a
4 changed files with 91 additions and 85 deletions

View file

@ -284,6 +284,7 @@ impl<'a> Parser<'a> {
if self.prev_token == token::BinOp(token::Minus)
&& self.token == token::BinOp(token::Minus)
&& self.prev_token.span.between(self.token.span).is_empty()
&& !self.look_ahead(1, |tok| tok.can_begin_expr())
{
let op_span = self.prev_token.span.to(self.token.span);
// Eat the second `-`
@ -560,7 +561,10 @@ impl<'a> Parser<'a> {
token::Not => make_it!(this, attrs, |this, _| this.parse_unary_expr(lo, UnOp::Not)),
// `~expr`
token::Tilde => make_it!(this, attrs, |this, _| this.recover_tilde_expr(lo)),
// // `-expr`
// token::BinOp(token::Minus) => {
// make_it!(this, attrs, |this, _| this.parse_unary_expr(lo, UnOp::Neg))
// }
// `*expr`
token::BinOp(token::Star) => {
make_it!(this, attrs, |this, _| this.parse_unary_expr(lo, UnOp::Deref))
@ -604,17 +608,20 @@ impl<'a> Parser<'a> {
}
// Recover from `--x`:
token::BinOp(token::Minus)
if this.look_ahead(1, |t| *t == token::BinOp(token::Minus)) =>
if this.look_ahead(1, |t| *t == token::BinOp(token::Minus))
&& !this.token.can_begin_expr() =>
{
let starts_stmt = this.prev_token == token::Semi
|| this.prev_token == token::CloseDelim(Delimiter::Brace);
let pre_span = this.token.span.to(this.look_ahead(1, |t| t.span));
// if !this.token.can_begin_expr() {
// Eat both `-`s.
this.bump();
this.bump();
let operand_expr = this.parse_dot_or_call_expr(Default::default())?;
this.recover_from_prefix_decrement(operand_expr, pre_span, starts_stmt)
// }
}
// `-expr`
token::BinOp(token::Minus) => {