@@ -4,7 +4,6 @@ use ast::{ForLoopKind, MatchKind};
4
4
use itertools:: { Itertools , Position } ;
5
5
use rustc_ast:: ptr:: P ;
6
6
use rustc_ast:: token;
7
- use rustc_ast:: util:: classify;
8
7
use rustc_ast:: util:: literal:: escape_byte_str_symbol;
9
8
use rustc_ast:: util:: parser:: { self , AssocOp , Fixity } ;
10
9
use rustc_ast:: { self as ast, BlockCheckMode } ;
@@ -64,9 +63,7 @@ impl<'a> State<'a> {
64
63
/// Prints an expr using syntax that's acceptable in a condition position, such as the `cond` in
65
64
/// `if cond { ... }`.
66
65
fn print_expr_as_cond ( & mut self , expr : & ast:: Expr ) {
67
- let fixup =
68
- FixupContext { parenthesize_exterior_struct_lit : true , ..FixupContext :: default ( ) } ;
69
- self . print_expr_cond_paren ( expr, Self :: cond_needs_par ( expr) , fixup)
66
+ self . print_expr_cond_paren ( expr, Self :: cond_needs_par ( expr) , FixupContext :: new_cond ( ) )
70
67
}
71
68
72
69
/// Does `expr` need parentheses when printed in a condition position?
@@ -238,15 +235,7 @@ impl<'a> State<'a> {
238
235
// because the latter is valid syntax but with the incorrect meaning.
239
236
// It's a match-expression followed by tuple-expression, not a function
240
237
// call.
241
- self . print_expr_maybe_paren (
242
- func,
243
- prec,
244
- FixupContext {
245
- stmt : false ,
246
- leftmost_subexpression_in_stmt : fixup. stmt || fixup. leftmost_subexpression_in_stmt ,
247
- ..fixup
248
- } ,
249
- ) ;
238
+ self . print_expr_maybe_paren ( func, prec, fixup. leftmost_subexpression ( ) ) ;
250
239
251
240
self . print_call_post ( args)
252
241
}
@@ -315,33 +304,17 @@ impl<'a> State<'a> {
315
304
_ => left_prec,
316
305
} ;
317
306
318
- self . print_expr_maybe_paren (
319
- lhs,
320
- left_prec,
321
- FixupContext {
322
- stmt : false ,
323
- leftmost_subexpression_in_stmt : fixup. stmt || fixup. leftmost_subexpression_in_stmt ,
324
- ..fixup
325
- } ,
326
- ) ;
307
+ self . print_expr_maybe_paren ( lhs, left_prec, fixup. leftmost_subexpression ( ) ) ;
327
308
328
309
self . space ( ) ;
329
310
self . word_space ( op. node . as_str ( ) ) ;
330
311
331
- self . print_expr_maybe_paren (
332
- rhs,
333
- right_prec,
334
- FixupContext { stmt : false , leftmost_subexpression_in_stmt : false , ..fixup } ,
335
- ) ;
312
+ self . print_expr_maybe_paren ( rhs, right_prec, fixup. subsequent_subexpression ( ) ) ;
336
313
}
337
314
338
315
fn print_expr_unary ( & mut self , op : ast:: UnOp , expr : & ast:: Expr , fixup : FixupContext ) {
339
316
self . word ( op. as_str ( ) ) ;
340
- self . print_expr_maybe_paren (
341
- expr,
342
- parser:: PREC_PREFIX ,
343
- FixupContext { stmt : false , leftmost_subexpression_in_stmt : false , ..fixup } ,
344
- ) ;
317
+ self . print_expr_maybe_paren ( expr, parser:: PREC_PREFIX , fixup. subsequent_subexpression ( ) ) ;
345
318
}
346
319
347
320
fn print_expr_addr_of (
@@ -359,11 +332,7 @@ impl<'a> State<'a> {
359
332
self . print_mutability ( mutability, true ) ;
360
333
}
361
334
}
362
- self . print_expr_maybe_paren (
363
- expr,
364
- parser:: PREC_PREFIX ,
365
- FixupContext { stmt : false , leftmost_subexpression_in_stmt : false , ..fixup } ,
366
- ) ;
335
+ self . print_expr_maybe_paren ( expr, parser:: PREC_PREFIX , fixup. subsequent_subexpression ( ) ) ;
367
336
}
368
337
369
338
pub ( super ) fn print_expr ( & mut self , expr : & ast:: Expr , fixup : FixupContext ) {
@@ -398,8 +367,7 @@ impl<'a> State<'a> {
398
367
//
399
368
// Same applies to a small set of other expression kinds which eagerly
400
369
// terminate a statement which opens with them.
401
- let needs_par =
402
- fixup. leftmost_subexpression_in_stmt && !classify:: expr_requires_semi_to_be_stmt ( expr) ;
370
+ let needs_par = fixup. would_cause_statement_boundary ( expr) ;
403
371
if needs_par {
404
372
self . popen ( ) ;
405
373
fixup = FixupContext :: default ( ) ;
@@ -447,16 +415,7 @@ impl<'a> State<'a> {
447
415
}
448
416
ast:: ExprKind :: Cast ( expr, ty) => {
449
417
let prec = AssocOp :: As . precedence ( ) as i8 ;
450
- self . print_expr_maybe_paren (
451
- expr,
452
- prec,
453
- FixupContext {
454
- stmt : false ,
455
- leftmost_subexpression_in_stmt : fixup. stmt
456
- || fixup. leftmost_subexpression_in_stmt ,
457
- ..fixup
458
- } ,
459
- ) ;
418
+ self . print_expr_maybe_paren ( expr, prec, fixup. leftmost_subexpression ( ) ) ;
460
419
self . space ( ) ;
461
420
self . word_space ( "as" ) ;
462
421
self . print_type ( ty) ;
@@ -588,70 +547,34 @@ impl<'a> State<'a> {
588
547
self . print_block_with_attrs ( blk, attrs) ;
589
548
}
590
549
ast:: ExprKind :: Await ( expr, _) => {
591
- // Same fixups as ExprKind::MethodCall.
592
550
self . print_expr_maybe_paren ( expr, parser:: PREC_POSTFIX , fixup) ;
593
551
self . word ( ".await" ) ;
594
552
}
595
553
ast:: ExprKind :: Assign ( lhs, rhs, _) => {
596
- // Same fixups as ExprKind::Binary.
597
554
let prec = AssocOp :: Assign . precedence ( ) as i8 ;
598
- self . print_expr_maybe_paren (
599
- lhs,
600
- prec + 1 ,
601
- FixupContext {
602
- stmt : false ,
603
- leftmost_subexpression_in_stmt : fixup. stmt
604
- || fixup. leftmost_subexpression_in_stmt ,
605
- ..fixup
606
- } ,
607
- ) ;
555
+ self . print_expr_maybe_paren ( lhs, prec + 1 , fixup. leftmost_subexpression ( ) ) ;
608
556
self . space ( ) ;
609
557
self . word_space ( "=" ) ;
610
- self . print_expr_maybe_paren (
611
- rhs,
612
- prec,
613
- FixupContext { stmt : false , leftmost_subexpression_in_stmt : false , ..fixup } ,
614
- ) ;
558
+ self . print_expr_maybe_paren ( rhs, prec, fixup. subsequent_subexpression ( ) ) ;
615
559
}
616
560
ast:: ExprKind :: AssignOp ( op, lhs, rhs) => {
617
- // Same fixups as ExprKind::Binary.
618
561
let prec = AssocOp :: Assign . precedence ( ) as i8 ;
619
- self . print_expr_maybe_paren (
620
- lhs,
621
- prec + 1 ,
622
- FixupContext {
623
- stmt : false ,
624
- leftmost_subexpression_in_stmt : fixup. stmt
625
- || fixup. leftmost_subexpression_in_stmt ,
626
- ..fixup
627
- } ,
628
- ) ;
562
+ self . print_expr_maybe_paren ( lhs, prec + 1 , fixup. leftmost_subexpression ( ) ) ;
629
563
self . space ( ) ;
630
564
self . word ( op. node . as_str ( ) ) ;
631
565
self . word_space ( "=" ) ;
632
- self . print_expr_maybe_paren (
633
- rhs,
634
- prec,
635
- FixupContext { stmt : false , leftmost_subexpression_in_stmt : false , ..fixup } ,
636
- ) ;
566
+ self . print_expr_maybe_paren ( rhs, prec, fixup. subsequent_subexpression ( ) ) ;
637
567
}
638
568
ast:: ExprKind :: Field ( expr, ident) => {
639
- // Same fixups as ExprKind::MethodCall.
640
569
self . print_expr_maybe_paren ( expr, parser:: PREC_POSTFIX , fixup) ;
641
570
self . word ( "." ) ;
642
571
self . print_ident ( * ident) ;
643
572
}
644
573
ast:: ExprKind :: Index ( expr, index, _) => {
645
- // Same fixups as ExprKind::Call.
646
574
self . print_expr_maybe_paren (
647
575
expr,
648
576
parser:: PREC_POSTFIX ,
649
- FixupContext {
650
- stmt : false ,
651
- leftmost_subexpression_in_stmt : fixup. stmt
652
- || fixup. leftmost_subexpression_in_stmt ,
653
- ..fixup
654
- } ,
577
+ fixup. leftmost_subexpression ( ) ,
655
578
) ;
656
579
self . word ( "[" ) ;
657
580
self . print_expr ( index, FixupContext :: default ( ) ) ;
@@ -664,31 +587,14 @@ impl<'a> State<'a> {
664
587
// a "normal" binop gets parenthesized. (`LOr` is the lowest-precedence binop.)
665
588
let fake_prec = AssocOp :: LOr . precedence ( ) as i8 ;
666
589
if let Some ( e) = start {
667
- self . print_expr_maybe_paren (
668
- e,
669
- fake_prec,
670
- FixupContext {
671
- stmt : false ,
672
- leftmost_subexpression_in_stmt : fixup. stmt
673
- || fixup. leftmost_subexpression_in_stmt ,
674
- ..fixup
675
- } ,
676
- ) ;
590
+ self . print_expr_maybe_paren ( e, fake_prec, fixup. leftmost_subexpression ( ) ) ;
677
591
}
678
592
match limits {
679
593
ast:: RangeLimits :: HalfOpen => self . word ( ".." ) ,
680
594
ast:: RangeLimits :: Closed => self . word ( "..=" ) ,
681
595
}
682
596
if let Some ( e) = end {
683
- self . print_expr_maybe_paren (
684
- e,
685
- fake_prec,
686
- FixupContext {
687
- stmt : false ,
688
- leftmost_subexpression_in_stmt : false ,
689
- ..fixup
690
- } ,
691
- ) ;
597
+ self . print_expr_maybe_paren ( e, fake_prec, fixup. subsequent_subexpression ( ) ) ;
692
598
}
693
599
}
694
600
ast:: ExprKind :: Underscore => self . word ( "_" ) ,
@@ -705,11 +611,7 @@ impl<'a> State<'a> {
705
611
self . print_expr_maybe_paren (
706
612
expr,
707
613
parser:: PREC_JUMP ,
708
- FixupContext {
709
- stmt : false ,
710
- leftmost_subexpression_in_stmt : false ,
711
- ..fixup
712
- } ,
614
+ fixup. subsequent_subexpression ( ) ,
713
615
) ;
714
616
}
715
617
}
@@ -727,11 +629,7 @@ impl<'a> State<'a> {
727
629
self . print_expr_maybe_paren (
728
630
expr,
729
631
parser:: PREC_JUMP ,
730
- FixupContext {
731
- stmt : false ,
732
- leftmost_subexpression_in_stmt : false ,
733
- ..fixup
734
- } ,
632
+ fixup. subsequent_subexpression ( ) ,
735
633
) ;
736
634
}
737
635
}
@@ -744,11 +642,7 @@ impl<'a> State<'a> {
744
642
self . print_expr_maybe_paren (
745
643
expr,
746
644
parser:: PREC_JUMP ,
747
- FixupContext {
748
- stmt : false ,
749
- leftmost_subexpression_in_stmt : false ,
750
- ..fixup
751
- } ,
645
+ fixup. subsequent_subexpression ( ) ,
752
646
) ;
753
647
}
754
648
}
@@ -758,7 +652,7 @@ impl<'a> State<'a> {
758
652
self . print_expr_maybe_paren (
759
653
result,
760
654
parser:: PREC_JUMP ,
761
- FixupContext { stmt : false , leftmost_subexpression_in_stmt : false , .. fixup } ,
655
+ fixup. subsequent_subexpression ( ) ,
762
656
) ;
763
657
}
764
658
ast:: ExprKind :: InlineAsm ( a) => {
@@ -812,16 +706,11 @@ impl<'a> State<'a> {
812
706
self . print_expr_maybe_paren (
813
707
expr,
814
708
parser:: PREC_JUMP ,
815
- FixupContext {
816
- stmt : false ,
817
- leftmost_subexpression_in_stmt : false ,
818
- ..fixup
819
- } ,
709
+ fixup. subsequent_subexpression ( ) ,
820
710
) ;
821
711
}
822
712
}
823
713
ast:: ExprKind :: Try ( e) => {
824
- // Same fixups as ExprKind::MethodCall.
825
714
self . print_expr_maybe_paren ( e, parser:: PREC_POSTFIX , fixup) ;
826
715
self . word ( "?" )
827
716
}
@@ -889,7 +778,7 @@ impl<'a> State<'a> {
889
778
}
890
779
_ => {
891
780
self . end ( ) ; // Close the ibox for the pattern.
892
- self . print_expr ( body, FixupContext { stmt : true , .. FixupContext :: default ( ) } ) ;
781
+ self . print_expr ( body, FixupContext :: new_stmt ( ) ) ;
893
782
self . word ( "," ) ;
894
783
}
895
784
}
0 commit comments