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