Change comparison operators to have Fixity::None

This commit is contained in:
David Tolnay 2024-12-20 19:50:42 -08:00
parent d748d1d953
commit fe65e886f3
No known key found for this signature in database
GPG key ID: F9BA143B95FF6D82
3 changed files with 8 additions and 17 deletions

View file

@ -153,9 +153,10 @@ impl AssocOp {
match *self {
Assign | AssignOp(_) => Fixity::Right,
As | Multiply | Divide | Modulus | Add | Subtract | ShiftLeft | ShiftRight | BitAnd
| BitXor | BitOr | Less | Greater | LessEqual | GreaterEqual | Equal | NotEqual
| LAnd | LOr => Fixity::Left,
DotDot | DotDotEq => Fixity::None,
| BitXor | BitOr | LAnd | LOr => Fixity::Left,
Less | Greater | LessEqual | GreaterEqual | Equal | NotEqual | DotDot | DotDotEq => {
Fixity::None
}
}
}

View file

@ -279,13 +279,9 @@ impl<'a> Parser<'a> {
break;
}
let fixity = op.fixity();
let min_prec = match fixity {
let min_prec = match op.fixity() {
Fixity::Right => Bound::Included(prec),
Fixity::Left => Bound::Excluded(prec),
// We currently have no non-associative operators that are not handled above by
// the special cases. The code is here only for future convenience.
Fixity::None => Bound::Excluded(prec),
Fixity::Left | Fixity::None => Bound::Excluded(prec),
};
let (rhs, _) = self.with_res(restrictions - Restrictions::STMT_EXPR, |this| {
let attrs = this.parse_outer_attributes()?;
@ -337,10 +333,6 @@ impl<'a> Parser<'a> {
self.dcx().span_bug(span, "AssocOp should have been handled by special case")
}
};
if let Fixity::None = fixity {
break;
}
}
Ok((lhs, parsed_something))

View file

@ -97,6 +97,8 @@ static EXPRS: &[&str] = &[
"2..(2..2)",
"(2..2)..",
"..(2..2)",
// Grammar restriction: comparison operators cannot be chained (1 < 2 == false).
"((1 < 2) == false) as usize",
// Grammar restriction: the value in let-else is not allowed to end in a
// curly brace.
"{ let _ = 1 + 1 else {}; }",
@ -121,10 +123,6 @@ static EXPRS: &[&str] = &[
"if let _ = () && (Struct {}).x {}",
*/
/*
// FIXME: pretty-printer produces invalid syntax. `(1 < 2 == false) as usize`
"((1 < 2) == false) as usize",
*/
/*
// FIXME: pretty-printer produces invalid syntax. `for _ in 1..{ 2 } {}`
"for _ in (1..{ 2 }) {}",
*/