Skip to content

Commit

Permalink
Delete special handling of some expr kinds from print_let
Browse files Browse the repository at this point in the history
In all four of Break, Closure, Ret, Yeet, the needs_par_as_let_scrutinee
is guaranteed to return true because the .precedence().order() of those
expr kinds is <= AssocOp::LAnd.precedence().

The relevant functions in rustc_ast::util::parser are:

    fn needs_par_as_let_scrutinee(order: i8) -> bool {
        order <= prec_let_scrutinee_needs_par() as i8
    }

    fn prec_let_scrutinee_needs_par() -> usize {
        AssocOp::LAnd.precedence()
    }

The .precedence().order() of Closure is PREC_CLOSURE (-40) and of Break,
Ret, Yeet is PREC_JUMP (-30).

The value of AssocOp::LAnd.precedence() is 6.

So this commit causes no change in behavior, only potentially
performance by doing a redundant call to contains_exterior_struct_lit in
those four cases. This is fine because Break, Closure, Ret, Yeet should
be exceedingly rare in the position of a let scrutinee.
  • Loading branch information
dtolnay committed Dec 7, 2023
1 parent 437eaa1 commit 43469be
Showing 1 changed file with 2 additions and 10 deletions.
12 changes: 2 additions & 10 deletions compiler/rustc_ast_pretty/src/pprust/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1161,16 +1161,8 @@ impl<'a> State<'a> {
self.word_space("=");
self.print_expr_cond_paren(
expr,
match expr.kind {
ast::ExprKind::Break(..)
| ast::ExprKind::Closure(..)
| ast::ExprKind::Ret(..)
| ast::ExprKind::Yeet(..) => true,
_ => {
parser::contains_exterior_struct_lit(expr)
|| parser::needs_par_as_let_scrutinee(expr.precedence().order())
}
},
parser::contains_exterior_struct_lit(expr)
|| parser::needs_par_as_let_scrutinee(expr.precedence().order()),
);
}

Expand Down

0 comments on commit 43469be

Please sign in to comment.