@@ -5,7 +5,7 @@ use itertools::{Itertools, Position};
55use rustc_ast:: ptr:: P ;
66use rustc_ast:: util:: classify;
77use rustc_ast:: util:: literal:: escape_byte_str_symbol;
8- use rustc_ast:: util:: parser:: { self , AssocOp , Fixity } ;
8+ use rustc_ast:: util:: parser:: { self , AssocOp , ExprPrecedence , Fixity } ;
99use rustc_ast:: {
1010 self as ast, BlockCheckMode , FormatAlignment , FormatArgPosition , FormatArgsPiece , FormatCount ,
1111 FormatDebugHex , FormatSign , FormatTrait , token,
@@ -214,7 +214,7 @@ impl<'a> State<'a> {
214214 fn print_expr_call ( & mut self , func : & ast:: Expr , args : & [ P < ast:: Expr > ] , fixup : FixupContext ) {
215215 let needs_paren = match func. kind {
216216 ast:: ExprKind :: Field ( ..) => true ,
217- _ => func. precedence ( ) < parser :: PREC_UNAMBIGUOUS ,
217+ _ => func. precedence ( ) < ExprPrecedence :: Unambiguous ,
218218 } ;
219219
220220 // Independent of parenthesization related to precedence, we must
@@ -256,7 +256,7 @@ impl<'a> State<'a> {
256256 // a statement containing an expression.
257257 self . print_expr_cond_paren (
258258 receiver,
259- receiver. precedence ( ) < parser :: PREC_UNAMBIGUOUS ,
259+ receiver. precedence ( ) < ExprPrecedence :: Unambiguous ,
260260 fixup,
261261 ) ;
262262
@@ -276,7 +276,7 @@ impl<'a> State<'a> {
276276 fixup : FixupContext ,
277277 ) {
278278 let assoc_op = AssocOp :: from_ast_binop ( op. node ) ;
279- let binop_prec = assoc_op. precedence ( ) as i8 ;
279+ let binop_prec = assoc_op. precedence ( ) ;
280280 let left_prec = lhs. precedence ( ) ;
281281 let right_prec = rhs. precedence ( ) ;
282282
@@ -317,7 +317,7 @@ impl<'a> State<'a> {
317317 self . word ( op. as_str ( ) ) ;
318318 self . print_expr_cond_paren (
319319 expr,
320- expr. precedence ( ) < parser :: PREC_PREFIX ,
320+ expr. precedence ( ) < ExprPrecedence :: Prefix ,
321321 fixup. subsequent_subexpression ( ) ,
322322 ) ;
323323 }
@@ -339,7 +339,7 @@ impl<'a> State<'a> {
339339 }
340340 self . print_expr_cond_paren (
341341 expr,
342- expr. precedence ( ) < parser :: PREC_PREFIX ,
342+ expr. precedence ( ) < ExprPrecedence :: Prefix ,
343343 fixup. subsequent_subexpression ( ) ,
344344 ) ;
345345 }
@@ -423,10 +423,9 @@ impl<'a> State<'a> {
423423 self . print_token_literal ( lit, expr. span )
424424 }
425425 ast:: ExprKind :: Cast ( expr, ty) => {
426- let prec = AssocOp :: As . precedence ( ) as i8 ;
427426 self . print_expr_cond_paren (
428427 expr,
429- expr. precedence ( ) < prec ,
428+ expr. precedence ( ) < ExprPrecedence :: Cast ,
430429 fixup. leftmost_subexpression ( ) ,
431430 ) ;
432431 self . space ( ) ;
@@ -503,7 +502,7 @@ impl<'a> State<'a> {
503502 MatchKind :: Postfix => {
504503 self . print_expr_cond_paren (
505504 expr,
506- expr. precedence ( ) < parser :: PREC_UNAMBIGUOUS ,
505+ expr. precedence ( ) < ExprPrecedence :: Unambiguous ,
507506 fixup,
508507 ) ;
509508 self . word_nbsp ( ".match" ) ;
@@ -567,46 +566,46 @@ impl<'a> State<'a> {
567566 ast:: ExprKind :: Await ( expr, _) => {
568567 self . print_expr_cond_paren (
569568 expr,
570- expr. precedence ( ) < parser :: PREC_UNAMBIGUOUS ,
569+ expr. precedence ( ) < ExprPrecedence :: Unambiguous ,
571570 fixup,
572571 ) ;
573572 self . word ( ".await" ) ;
574573 }
575574 ast:: ExprKind :: Assign ( lhs, rhs, _) => {
576- let prec = AssocOp :: Assign . precedence ( ) as i8 ;
577575 self . print_expr_cond_paren (
578576 lhs,
579- lhs. precedence ( ) <= prec,
577+ // Ranges are allowed on the right-hand side of assignment,
578+ // but not the left. `(a..b) = c` needs parentheses.
579+ lhs. precedence ( ) <= ExprPrecedence :: Range ,
580580 fixup. leftmost_subexpression ( ) ,
581581 ) ;
582582 self . space ( ) ;
583583 self . word_space ( "=" ) ;
584584 self . print_expr_cond_paren (
585585 rhs,
586- rhs. precedence ( ) < prec ,
586+ rhs. precedence ( ) < ExprPrecedence :: Assign ,
587587 fixup. subsequent_subexpression ( ) ,
588588 ) ;
589589 }
590590 ast:: ExprKind :: AssignOp ( op, lhs, rhs) => {
591- let prec = AssocOp :: Assign . precedence ( ) as i8 ;
592591 self . print_expr_cond_paren (
593592 lhs,
594- lhs. precedence ( ) <= prec ,
593+ lhs. precedence ( ) <= ExprPrecedence :: Range ,
595594 fixup. leftmost_subexpression ( ) ,
596595 ) ;
597596 self . space ( ) ;
598597 self . word ( op. node . as_str ( ) ) ;
599598 self . word_space ( "=" ) ;
600599 self . print_expr_cond_paren (
601600 rhs,
602- rhs. precedence ( ) < prec ,
601+ rhs. precedence ( ) < ExprPrecedence :: Assign ,
603602 fixup. subsequent_subexpression ( ) ,
604603 ) ;
605604 }
606605 ast:: ExprKind :: Field ( expr, ident) => {
607606 self . print_expr_cond_paren (
608607 expr,
609- expr. precedence ( ) < parser :: PREC_UNAMBIGUOUS ,
608+ expr. precedence ( ) < ExprPrecedence :: Unambiguous ,
610609 fixup,
611610 ) ;
612611 self . word ( "." ) ;
@@ -615,7 +614,7 @@ impl<'a> State<'a> {
615614 ast:: ExprKind :: Index ( expr, index, _) => {
616615 self . print_expr_cond_paren (
617616 expr,
618- expr. precedence ( ) < parser :: PREC_UNAMBIGUOUS ,
617+ expr. precedence ( ) < ExprPrecedence :: Unambiguous ,
619618 fixup. leftmost_subexpression ( ) ,
620619 ) ;
621620 self . word ( "[" ) ;
@@ -627,7 +626,7 @@ impl<'a> State<'a> {
627626 // than `Assign`, but `x .. x = x` gives a parse error instead of `x .. (x = x)`.
628627 // Here we use a fake precedence value so that any child with lower precedence than
629628 // a "normal" binop gets parenthesized. (`LOr` is the lowest-precedence binop.)
630- let fake_prec = AssocOp :: LOr . precedence ( ) as i8 ;
629+ let fake_prec = ExprPrecedence :: LOr ;
631630 if let Some ( e) = start {
632631 self . print_expr_cond_paren (
633632 e,
@@ -662,7 +661,7 @@ impl<'a> State<'a> {
662661 expr,
663662 // Parenthesize if required by precedence, or in the
664663 // case of `break 'inner: loop { break 'inner 1 } + 1`
665- expr. precedence ( ) < parser :: PREC_JUMP
664+ expr. precedence ( ) < ExprPrecedence :: Jump
666665 || ( opt_label. is_none ( ) && classify:: leading_labeled_expr ( expr) ) ,
667666 fixup. subsequent_subexpression ( ) ,
668667 ) ;
@@ -681,7 +680,7 @@ impl<'a> State<'a> {
681680 self . word ( " " ) ;
682681 self . print_expr_cond_paren (
683682 expr,
684- expr. precedence ( ) < parser :: PREC_JUMP ,
683+ expr. precedence ( ) < ExprPrecedence :: Jump ,
685684 fixup. subsequent_subexpression ( ) ,
686685 ) ;
687686 }
@@ -694,7 +693,7 @@ impl<'a> State<'a> {
694693 self . word ( " " ) ;
695694 self . print_expr_cond_paren (
696695 expr,
697- expr. precedence ( ) < parser :: PREC_JUMP ,
696+ expr. precedence ( ) < ExprPrecedence :: Jump ,
698697 fixup. subsequent_subexpression ( ) ,
699698 ) ;
700699 }
@@ -704,7 +703,7 @@ impl<'a> State<'a> {
704703 self . word ( " " ) ;
705704 self . print_expr_cond_paren (
706705 result,
707- result. precedence ( ) < parser :: PREC_JUMP ,
706+ result. precedence ( ) < ExprPrecedence :: Jump ,
708707 fixup. subsequent_subexpression ( ) ,
709708 ) ;
710709 }
@@ -758,13 +757,13 @@ impl<'a> State<'a> {
758757 self . space ( ) ;
759758 self . print_expr_cond_paren (
760759 expr,
761- expr. precedence ( ) < parser :: PREC_JUMP ,
760+ expr. precedence ( ) < ExprPrecedence :: Jump ,
762761 fixup. subsequent_subexpression ( ) ,
763762 ) ;
764763 }
765764 }
766765 ast:: ExprKind :: Try ( e) => {
767- self . print_expr_cond_paren ( e, e. precedence ( ) < parser :: PREC_UNAMBIGUOUS , fixup) ;
766+ self . print_expr_cond_paren ( e, e. precedence ( ) < ExprPrecedence :: Unambiguous , fixup) ;
768767 self . word ( "?" )
769768 }
770769 ast:: ExprKind :: TryBlock ( blk) => {
0 commit comments