@@ -11,15 +11,15 @@ use std::ops::DerefMut;
11
11
use std:: panic;
12
12
13
13
use rustc_data_structures:: flat_map_in_place:: FlatMapInPlace ;
14
- use rustc_data_structures :: stack :: ensure_sufficient_stack ;
14
+ use rustc_span :: source_map :: Spanned ;
15
15
use rustc_span:: { Ident , Span } ;
16
16
use smallvec:: { Array , SmallVec , smallvec} ;
17
17
use thin_vec:: ThinVec ;
18
18
19
19
use crate :: ast:: * ;
20
20
use crate :: ptr:: P ;
21
21
use crate :: tokenstream:: * ;
22
- use crate :: visit:: { AssocCtxt , BoundKind , FnCtxt , try_visit, visit_opt, walk_list} ;
22
+ use crate :: visit:: { AssocCtxt , BoundKind , FnCtxt , VisitorResult , try_visit, visit_opt, walk_list} ;
23
23
24
24
pub trait ExpectOne < A : Array > {
25
25
fn expect_one ( self , err : & ' static str ) -> A :: Item ;
@@ -32,7 +32,22 @@ impl<A: Array> ExpectOne<A> for SmallVec<A> {
32
32
}
33
33
}
34
34
35
- pub trait MutVisitor : Sized {
35
+ mod sealed {
36
+ use rustc_ast_ir:: visit:: VisitorResult ;
37
+
38
+ /// This is for compatibility with the regular `Visitor`.
39
+ pub trait MutVisitorResult {
40
+ type Result : VisitorResult ;
41
+ }
42
+
43
+ impl < T > MutVisitorResult for T {
44
+ type Result = ( ) ;
45
+ }
46
+ }
47
+
48
+ use sealed:: MutVisitorResult ;
49
+
50
+ pub trait MutVisitor : Sized + MutVisitorResult < Result = ( ) > {
36
51
// Methods in this trait have one of three forms:
37
52
//
38
53
// fn visit_t(&mut self, t: &mut T); // common
@@ -227,14 +242,6 @@ pub trait MutVisitor: Sized {
227
242
walk_generic_args ( self , p) ;
228
243
}
229
244
230
- fn visit_angle_bracketed_parameter_data ( & mut self , p : & mut AngleBracketedArgs ) {
231
- walk_angle_bracketed_parameter_data ( self , p) ;
232
- }
233
-
234
- fn visit_parenthesized_parameter_data ( & mut self , p : & mut ParenthesizedArgs ) {
235
- walk_parenthesized_parameter_data ( self , p) ;
236
- }
237
-
238
245
fn visit_local ( & mut self , l : & mut Local ) {
239
246
walk_local ( self , l) ;
240
247
}
@@ -303,10 +310,6 @@ pub trait MutVisitor: Sized {
303
310
walk_flat_map_expr_field ( self , f)
304
311
}
305
312
306
- fn visit_where_clause ( & mut self , where_clause : & mut WhereClause ) {
307
- walk_where_clause ( self , where_clause) ;
308
- }
309
-
310
313
fn flat_map_where_predicate (
311
314
& mut self ,
312
315
where_predicate : WherePredicate ,
@@ -385,19 +388,14 @@ generate_flat_map_visitor_fns! {
385
388
visit_generic_params, GenericParam , flat_map_generic_param;
386
389
visit_stmts, Stmt , flat_map_stmt;
387
390
visit_exprs, P <Expr >, filter_map_expr;
391
+ visit_expr_fields, ExprField , flat_map_expr_field;
388
392
visit_pat_fields, PatField , flat_map_pat_field;
389
393
visit_variants, Variant , flat_map_variant;
390
394
visit_assoc_items, P <AssocItem >, flat_map_assoc_item, ctxt: AssocCtxt ;
391
- }
392
-
393
- #[ inline]
394
- fn visit_vec < T , F > ( elems : & mut Vec < T > , mut visit_elem : F )
395
- where
396
- F : FnMut ( & mut T ) ,
397
- {
398
- for elem in elems {
399
- visit_elem ( elem) ;
400
- }
395
+ visit_where_predicates, WherePredicate , flat_map_where_predicate;
396
+ visit_params, Param , flat_map_param;
397
+ visit_field_defs, FieldDef , flat_map_field_def;
398
+ visit_arms, Arm , flat_map_arm;
401
399
}
402
400
403
401
#[ inline]
@@ -410,40 +408,12 @@ where
410
408
}
411
409
}
412
410
413
- #[ inline]
414
- fn visit_opt < T , F > ( opt : & mut Option < T > , mut visit_elem : F )
415
- where
416
- F : FnMut ( & mut T ) ,
417
- {
418
- if let Some ( elem) = opt {
419
- visit_elem ( elem) ;
420
- }
421
- }
422
-
423
411
fn visit_attrs < T : MutVisitor > ( vis : & mut T , attrs : & mut AttrVec ) {
424
412
for attr in attrs. iter_mut ( ) {
425
413
vis. visit_attribute ( attr) ;
426
414
}
427
415
}
428
416
429
- fn visit_attr_args < T : MutVisitor > ( vis : & mut T , args : & mut AttrArgs ) {
430
- match args {
431
- AttrArgs :: Empty => { }
432
- AttrArgs :: Delimited ( args) => visit_delim_args ( vis, args) ,
433
- AttrArgs :: Eq { eq_span, expr } => {
434
- vis. visit_expr ( expr) ;
435
- vis. visit_span ( eq_span) ;
436
- }
437
- }
438
- }
439
-
440
- fn visit_delim_args < T : MutVisitor > ( vis : & mut T , args : & mut DelimArgs ) {
441
- let DelimArgs { dspan, delim : _, tokens : _ } = args;
442
- let DelimSpan { open, close } = dspan;
443
- vis. visit_span ( open) ;
444
- vis. visit_span ( close) ;
445
- }
446
-
447
417
pub fn walk_flat_map_pat_field < T : MutVisitor > (
448
418
vis : & mut T ,
449
419
mut fp : PatField ,
@@ -461,40 +431,11 @@ fn visit_nested_use_tree<V: MutVisitor>(
461
431
vis. visit_use_tree ( nested_tree) ;
462
432
}
463
433
464
- pub fn walk_arm < T : MutVisitor > ( vis : & mut T , arm : & mut Arm ) {
465
- let Arm { attrs, pat, guard, body, span, id, is_placeholder : _ } = arm;
466
- vis. visit_id ( id) ;
467
- visit_attrs ( vis, attrs) ;
468
- vis. visit_pat ( pat) ;
469
- visit_opt ( guard, |guard| vis. visit_expr ( guard) ) ;
470
- visit_opt ( body, |body| vis. visit_expr ( body) ) ;
471
- vis. visit_span ( span) ;
472
- }
473
-
474
434
pub fn walk_flat_map_arm < T : MutVisitor > ( vis : & mut T , mut arm : Arm ) -> SmallVec < [ Arm ; 1 ] > {
475
435
vis. visit_arm ( & mut arm) ;
476
436
smallvec ! [ arm]
477
437
}
478
438
479
- fn walk_assoc_item_constraint < T : MutVisitor > (
480
- vis : & mut T ,
481
- AssocItemConstraint { id, ident, gen_args, kind, span } : & mut AssocItemConstraint ,
482
- ) {
483
- vis. visit_id ( id) ;
484
- vis. visit_ident ( ident) ;
485
- if let Some ( gen_args) = gen_args {
486
- vis. visit_generic_args ( gen_args) ;
487
- }
488
- match kind {
489
- AssocItemConstraintKind :: Equality { term } => match term {
490
- Term :: Ty ( ty) => vis. visit_ty ( ty) ,
491
- Term :: Const ( c) => vis. visit_anon_const ( c) ,
492
- } ,
493
- AssocItemConstraintKind :: Bound { bounds } => visit_bounds ( vis, bounds, BoundKind :: Bound ) ,
494
- }
495
- vis. visit_span ( span) ;
496
- }
497
-
498
439
pub fn walk_flat_map_variant < T : MutVisitor > (
499
440
vis : & mut T ,
500
441
mut variant : Variant ,
@@ -503,64 +444,6 @@ pub fn walk_flat_map_variant<T: MutVisitor>(
503
444
smallvec ! [ variant]
504
445
}
505
446
506
- fn walk_generic_args < T : MutVisitor > ( vis : & mut T , generic_args : & mut GenericArgs ) {
507
- match generic_args {
508
- GenericArgs :: AngleBracketed ( data) => vis. visit_angle_bracketed_parameter_data ( data) ,
509
- GenericArgs :: Parenthesized ( data) => vis. visit_parenthesized_parameter_data ( data) ,
510
- GenericArgs :: ParenthesizedElided ( span) => vis. visit_span ( span) ,
511
- }
512
- }
513
-
514
- fn walk_generic_arg < T : MutVisitor > ( vis : & mut T , arg : & mut GenericArg ) {
515
- match arg {
516
- GenericArg :: Lifetime ( lt) => vis. visit_lifetime ( lt) ,
517
- GenericArg :: Type ( ty) => vis. visit_ty ( ty) ,
518
- GenericArg :: Const ( ct) => vis. visit_anon_const ( ct) ,
519
- }
520
- }
521
-
522
- fn walk_angle_bracketed_parameter_data < T : MutVisitor > ( vis : & mut T , data : & mut AngleBracketedArgs ) {
523
- let AngleBracketedArgs { args, span } = data;
524
- visit_thin_vec ( args, |arg| match arg {
525
- AngleBracketedArg :: Arg ( arg) => vis. visit_generic_arg ( arg) ,
526
- AngleBracketedArg :: Constraint ( constraint) => vis. visit_assoc_item_constraint ( constraint) ,
527
- } ) ;
528
- vis. visit_span ( span) ;
529
- }
530
-
531
- fn walk_parenthesized_parameter_data < T : MutVisitor > ( vis : & mut T , args : & mut ParenthesizedArgs ) {
532
- let ParenthesizedArgs { inputs, output, span, inputs_span } = args;
533
- visit_thin_vec ( inputs, |input| vis. visit_ty ( input) ) ;
534
- vis. visit_fn_ret_ty ( output) ;
535
- vis. visit_span ( span) ;
536
- vis. visit_span ( inputs_span) ;
537
- }
538
-
539
- fn walk_attribute < T : MutVisitor > ( vis : & mut T , attr : & mut Attribute ) {
540
- let Attribute { kind, id : _, style : _, span } = attr;
541
- match kind {
542
- AttrKind :: Normal ( normal) => {
543
- let NormalAttr { item : AttrItem { unsafety : _, path, args, tokens : _ } , tokens : _ } =
544
- & mut * * normal;
545
- vis. visit_path ( path) ;
546
- visit_attr_args ( vis, args) ;
547
- }
548
- AttrKind :: DocComment ( _kind, _sym) => { }
549
- }
550
- vis. visit_span ( span) ;
551
- }
552
-
553
- fn walk_mac < T : MutVisitor > ( vis : & mut T , mac : & mut MacCall ) {
554
- let MacCall { path, args } = mac;
555
- vis. visit_path ( path) ;
556
- visit_delim_args ( vis, args) ;
557
- }
558
-
559
- fn walk_macro_def < T : MutVisitor > ( vis : & mut T , macro_def : & mut MacroDef ) {
560
- let MacroDef { body, macro_rules : _ } = macro_def;
561
- visit_delim_args ( vis, body) ;
562
- }
563
-
564
447
fn walk_meta_list_item < T : MutVisitor > ( vis : & mut T , li : & mut MetaItemInner ) {
565
448
match li {
566
449
MetaItemInner :: MetaItem ( mi) => vis. visit_meta_item ( mi) ,
@@ -578,138 +461,11 @@ fn walk_meta_item<T: MutVisitor>(vis: &mut T, mi: &mut MetaItem) {
578
461
vis. visit_span ( span) ;
579
462
}
580
463
581
- pub fn walk_param < T : MutVisitor > ( vis : & mut T , param : & mut Param ) {
582
- let Param { attrs, id, pat, span, ty, is_placeholder : _ } = param;
583
- vis. visit_id ( id) ;
584
- visit_attrs ( vis, attrs) ;
585
- vis. visit_pat ( pat) ;
586
- vis. visit_ty ( ty) ;
587
- vis. visit_span ( span) ;
588
- }
589
-
590
464
pub fn walk_flat_map_param < T : MutVisitor > ( vis : & mut T , mut param : Param ) -> SmallVec < [ Param ; 1 ] > {
591
465
vis. visit_param ( & mut param) ;
592
466
smallvec ! [ param]
593
467
}
594
468
595
- fn walk_closure_binder < T : MutVisitor > ( vis : & mut T , binder : & mut ClosureBinder ) {
596
- match binder {
597
- ClosureBinder :: NotPresent => { }
598
- ClosureBinder :: For { span : _, generic_params } => {
599
- generic_params. flat_map_in_place ( |param| vis. flat_map_generic_param ( param) ) ;
600
- }
601
- }
602
- }
603
-
604
- fn walk_fn < T : MutVisitor > ( vis : & mut T , kind : FnKind < ' _ > ) {
605
- match kind {
606
- FnKind :: Fn (
607
- _ctxt,
608
- _vis,
609
- Fn {
610
- defaultness,
611
- ident,
612
- generics,
613
- contract,
614
- body,
615
- sig : FnSig { header, decl, span } ,
616
- define_opaque,
617
- } ,
618
- ) => {
619
- // Visibility is visited as a part of the item.
620
- visit_defaultness ( vis, defaultness) ;
621
- vis. visit_ident ( ident) ;
622
- vis. visit_fn_header ( header) ;
623
- vis. visit_generics ( generics) ;
624
- vis. visit_fn_decl ( decl) ;
625
- if let Some ( contract) = contract {
626
- vis. visit_contract ( contract) ;
627
- }
628
- if let Some ( body) = body {
629
- vis. visit_block ( body) ;
630
- }
631
- vis. visit_span ( span) ;
632
-
633
- walk_define_opaques ( vis, define_opaque) ;
634
- }
635
- FnKind :: Closure ( binder, coroutine_kind, decl, body) => {
636
- vis. visit_closure_binder ( binder) ;
637
- coroutine_kind. as_mut ( ) . map ( |coroutine_kind| vis. visit_coroutine_kind ( coroutine_kind) ) ;
638
- vis. visit_fn_decl ( decl) ;
639
- vis. visit_expr ( body) ;
640
- }
641
- }
642
- }
643
-
644
- fn walk_contract < T : MutVisitor > ( vis : & mut T , contract : & mut FnContract ) {
645
- let FnContract { requires, ensures } = contract;
646
- if let Some ( pred) = requires {
647
- vis. visit_expr ( pred) ;
648
- }
649
- if let Some ( pred) = ensures {
650
- vis. visit_expr ( pred) ;
651
- }
652
- }
653
-
654
- fn walk_fn_decl < T : MutVisitor > ( vis : & mut T , decl : & mut FnDecl ) {
655
- let FnDecl { inputs, output } = decl;
656
- inputs. flat_map_in_place ( |param| vis. flat_map_param ( param) ) ;
657
- vis. visit_fn_ret_ty ( output) ;
658
- }
659
-
660
- fn walk_fn_ret_ty < T : MutVisitor > ( vis : & mut T , fn_ret_ty : & mut FnRetTy ) {
661
- match fn_ret_ty {
662
- FnRetTy :: Default ( span) => vis. visit_span ( span) ,
663
- FnRetTy :: Ty ( ty) => vis. visit_ty ( ty) ,
664
- }
665
- }
666
-
667
- fn walk_param_bound < T : MutVisitor > ( vis : & mut T , pb : & mut GenericBound ) {
668
- match pb {
669
- GenericBound :: Trait ( trait_ref) => vis. visit_poly_trait_ref ( trait_ref) ,
670
- GenericBound :: Outlives ( lifetime) => walk_lifetime ( vis, lifetime) ,
671
- GenericBound :: Use ( args, span) => {
672
- for arg in args {
673
- vis. visit_precise_capturing_arg ( arg) ;
674
- }
675
- vis. visit_span ( span) ;
676
- }
677
- }
678
- }
679
-
680
- fn walk_precise_capturing_arg < T : MutVisitor > ( vis : & mut T , arg : & mut PreciseCapturingArg ) {
681
- match arg {
682
- PreciseCapturingArg :: Lifetime ( lt) => {
683
- vis. visit_lifetime ( lt) ;
684
- }
685
- PreciseCapturingArg :: Arg ( path, id) => {
686
- vis. visit_id ( id) ;
687
- vis. visit_path ( path) ;
688
- }
689
- }
690
- }
691
-
692
- pub fn walk_generic_param < T : MutVisitor > ( vis : & mut T , param : & mut GenericParam ) {
693
- let GenericParam { id, ident, attrs, bounds, kind, colon_span, is_placeholder : _ } = param;
694
- vis. visit_id ( id) ;
695
- visit_attrs ( vis, attrs) ;
696
- vis. visit_ident ( ident) ;
697
- visit_vec ( bounds, |bound| vis. visit_param_bound ( bound, BoundKind :: Bound ) ) ;
698
- match kind {
699
- GenericParamKind :: Lifetime => { }
700
- GenericParamKind :: Type { default } => {
701
- visit_opt ( default, |default| vis. visit_ty ( default) ) ;
702
- }
703
- GenericParamKind :: Const { ty, kw_span : _, default } => {
704
- vis. visit_ty ( ty) ;
705
- visit_opt ( default, |default| vis. visit_anon_const ( default) ) ;
706
- }
707
- }
708
- if let Some ( colon_span) = colon_span {
709
- vis. visit_span ( colon_span) ;
710
- }
711
- }
712
-
713
469
pub fn walk_flat_map_generic_param < T : MutVisitor > (
714
470
vis : & mut T ,
715
471
mut param : GenericParam ,
@@ -718,13 +474,6 @@ pub fn walk_flat_map_generic_param<T: MutVisitor>(
718
474
smallvec ! [ param]
719
475
}
720
476
721
- fn walk_generics < T : MutVisitor > ( vis : & mut T , generics : & mut Generics ) {
722
- let Generics { params, where_clause, span } = generics;
723
- params. flat_map_in_place ( |param| vis. flat_map_generic_param ( param) ) ;
724
- vis. visit_where_clause ( where_clause) ;
725
- vis. visit_span ( span) ;
726
- }
727
-
728
477
fn walk_ty_alias_where_clauses < T : MutVisitor > ( vis : & mut T , tawcs : & mut TyAliasWhereClauses ) {
729
478
let TyAliasWhereClauses { before, after, split : _ } = tawcs;
730
479
let TyAliasWhereClause { has_where_token : _, span : span_before } = before;
@@ -733,70 +482,14 @@ fn walk_ty_alias_where_clauses<T: MutVisitor>(vis: &mut T, tawcs: &mut TyAliasWh
733
482
vis. visit_span ( span_after) ;
734
483
}
735
484
736
- fn walk_where_clause < T : MutVisitor > ( vis : & mut T , wc : & mut WhereClause ) {
737
- let WhereClause { has_where_token : _, predicates, span } = wc;
738
- predicates. flat_map_in_place ( |predicate| vis. flat_map_where_predicate ( predicate) ) ;
739
- vis. visit_span ( span) ;
740
- }
741
-
742
485
pub fn walk_flat_map_where_predicate < T : MutVisitor > (
743
486
vis : & mut T ,
744
487
mut pred : WherePredicate ,
745
488
) -> SmallVec < [ WherePredicate ; 1 ] > {
746
- let WherePredicate { attrs, kind, id, span, is_placeholder : _ } = & mut pred;
747
- vis. visit_id ( id) ;
748
- visit_attrs ( vis, attrs) ;
749
- vis. visit_where_predicate_kind ( kind) ;
750
- vis. visit_span ( span) ;
489
+ walk_where_predicate ( vis, & mut pred) ;
751
490
smallvec ! [ pred]
752
491
}
753
492
754
- pub fn walk_where_predicate_kind < T : MutVisitor > ( vis : & mut T , kind : & mut WherePredicateKind ) {
755
- match kind {
756
- WherePredicateKind :: BoundPredicate ( bp) => {
757
- let WhereBoundPredicate { bound_generic_params, bounded_ty, bounds } = bp;
758
- bound_generic_params. flat_map_in_place ( |param| vis. flat_map_generic_param ( param) ) ;
759
- vis. visit_ty ( bounded_ty) ;
760
- visit_vec ( bounds, |bound| vis. visit_param_bound ( bound, BoundKind :: Bound ) ) ;
761
- }
762
- WherePredicateKind :: RegionPredicate ( rp) => {
763
- let WhereRegionPredicate { lifetime, bounds } = rp;
764
- vis. visit_lifetime ( lifetime) ;
765
- visit_vec ( bounds, |bound| vis. visit_param_bound ( bound, BoundKind :: Bound ) ) ;
766
- }
767
- WherePredicateKind :: EqPredicate ( ep) => {
768
- let WhereEqPredicate { lhs_ty, rhs_ty } = ep;
769
- vis. visit_ty ( lhs_ty) ;
770
- vis. visit_ty ( rhs_ty) ;
771
- }
772
- }
773
- }
774
-
775
- fn walk_variant_data < T : MutVisitor > ( vis : & mut T , vdata : & mut VariantData ) {
776
- match vdata {
777
- VariantData :: Struct { fields, recovered : _ } => {
778
- fields. flat_map_in_place ( |field| vis. flat_map_field_def ( field) ) ;
779
- }
780
- VariantData :: Tuple ( fields, id) => {
781
- vis. visit_id ( id) ;
782
- fields. flat_map_in_place ( |field| vis. flat_map_field_def ( field) ) ;
783
- }
784
- VariantData :: Unit ( id) => vis. visit_id ( id) ,
785
- }
786
- }
787
-
788
- pub fn walk_field_def < T : MutVisitor > ( visitor : & mut T , fd : & mut FieldDef ) {
789
- let FieldDef { span, ident, vis, id, ty, attrs, is_placeholder : _, safety, default } = fd;
790
- visitor. visit_id ( id) ;
791
- visit_attrs ( visitor, attrs) ;
792
- visitor. visit_vis ( vis) ;
793
- visit_safety ( visitor, safety) ;
794
- visit_opt ( ident, |ident| visitor. visit_ident ( ident) ) ;
795
- visitor. visit_ty ( ty) ;
796
- visit_opt ( default, |default| visitor. visit_anon_const ( default) ) ;
797
- visitor. visit_span ( span) ;
798
- }
799
-
800
493
pub fn walk_flat_map_field_def < T : MutVisitor > (
801
494
vis : & mut T ,
802
495
mut fd : FieldDef ,
@@ -846,255 +539,6 @@ pub fn walk_flat_map_assoc_item(
846
539
smallvec ! [ item]
847
540
}
848
541
849
- fn walk_inline_asm < T : MutVisitor > ( vis : & mut T , asm : & mut InlineAsm ) {
850
- // FIXME: Visit spans inside all this currently ignored stuff.
851
- let InlineAsm {
852
- asm_macro : _,
853
- template : _,
854
- template_strs : _,
855
- operands,
856
- clobber_abis : _,
857
- options : _,
858
- line_spans : _,
859
- } = asm;
860
- for ( op, span) in operands {
861
- match op {
862
- InlineAsmOperand :: In { expr, reg : _ }
863
- | InlineAsmOperand :: Out { expr : Some ( expr) , reg : _, late : _ }
864
- | InlineAsmOperand :: InOut { expr, reg : _, late : _ } => vis. visit_expr ( expr) ,
865
- InlineAsmOperand :: Out { expr : None , reg : _, late : _ } => { }
866
- InlineAsmOperand :: SplitInOut { in_expr, out_expr, reg : _, late : _ } => {
867
- vis. visit_expr ( in_expr) ;
868
- if let Some ( out_expr) = out_expr {
869
- vis. visit_expr ( out_expr) ;
870
- }
871
- }
872
- InlineAsmOperand :: Const { anon_const } => vis. visit_anon_const ( anon_const) ,
873
- InlineAsmOperand :: Sym { sym } => vis. visit_inline_asm_sym ( sym) ,
874
- InlineAsmOperand :: Label { block } => vis. visit_block ( block) ,
875
- }
876
- vis. visit_span ( span) ;
877
- }
878
- }
879
-
880
- fn walk_inline_asm_sym < T : MutVisitor > (
881
- vis : & mut T ,
882
- InlineAsmSym { id, qself, path } : & mut InlineAsmSym ,
883
- ) {
884
- vis. visit_id ( id) ;
885
- vis. visit_qself ( qself) ;
886
- vis. visit_path ( path) ;
887
- }
888
-
889
- fn walk_format_args < T : MutVisitor > ( vis : & mut T , fmt : & mut FormatArgs ) {
890
- // FIXME: visit the template exhaustively.
891
- let FormatArgs { span, template : _, arguments, uncooked_fmt_str : _ } = fmt;
892
- for FormatArgument { kind, expr } in arguments. all_args_mut ( ) {
893
- match kind {
894
- FormatArgumentKind :: Named ( ident) | FormatArgumentKind :: Captured ( ident) => {
895
- vis. visit_ident ( ident)
896
- }
897
- FormatArgumentKind :: Normal => { }
898
- }
899
- vis. visit_expr ( expr) ;
900
- }
901
- vis. visit_span ( span) ;
902
- }
903
-
904
- pub fn walk_expr < T : MutVisitor > ( vis : & mut T , Expr { kind, id, span, attrs, tokens : _ } : & mut Expr ) {
905
- vis. visit_id ( id) ;
906
- visit_attrs ( vis, attrs) ;
907
- match kind {
908
- ExprKind :: Array ( exprs) => visit_exprs ( vis, exprs) ,
909
- ExprKind :: ConstBlock ( anon_const) => {
910
- vis. visit_anon_const ( anon_const) ;
911
- }
912
- ExprKind :: Repeat ( expr, count) => {
913
- vis. visit_expr ( expr) ;
914
- vis. visit_anon_const ( count) ;
915
- }
916
- ExprKind :: Tup ( exprs) => visit_exprs ( vis, exprs) ,
917
- ExprKind :: Call ( f, args) => {
918
- vis. visit_expr ( f) ;
919
- visit_exprs ( vis, args) ;
920
- }
921
- ExprKind :: MethodCall ( box MethodCall {
922
- seg : PathSegment { ident, id, args : seg_args } ,
923
- receiver,
924
- args : call_args,
925
- span,
926
- } ) => {
927
- vis. visit_method_receiver_expr ( receiver) ;
928
- vis. visit_id ( id) ;
929
- vis. visit_ident ( ident) ;
930
- visit_opt ( seg_args, |args| vis. visit_generic_args ( args) ) ;
931
- visit_exprs ( vis, call_args) ;
932
- vis. visit_span ( span) ;
933
- }
934
- ExprKind :: Binary ( binop, lhs, rhs) => {
935
- vis. visit_expr ( lhs) ;
936
- vis. visit_expr ( rhs) ;
937
- vis. visit_span ( & mut binop. span ) ;
938
- }
939
- ExprKind :: Unary ( _unop, ohs) => vis. visit_expr ( ohs) ,
940
- ExprKind :: Cast ( expr, ty) => {
941
- vis. visit_expr ( expr) ;
942
- vis. visit_ty ( ty) ;
943
- }
944
- ExprKind :: Type ( expr, ty) => {
945
- vis. visit_expr ( expr) ;
946
- vis. visit_ty ( ty) ;
947
- }
948
- ExprKind :: AddrOf ( _kind, _mut, ohs) => vis. visit_expr ( ohs) ,
949
- ExprKind :: Let ( pat, scrutinee, span, _recovered) => {
950
- vis. visit_pat ( pat) ;
951
- vis. visit_expr ( scrutinee) ;
952
- vis. visit_span ( span) ;
953
- }
954
- ExprKind :: If ( cond, tr, fl) => {
955
- vis. visit_expr ( cond) ;
956
- vis. visit_block ( tr) ;
957
- visit_opt ( fl, |fl| ensure_sufficient_stack ( || vis. visit_expr ( fl) ) ) ;
958
- }
959
- ExprKind :: While ( cond, body, label) => {
960
- visit_opt ( label, |label| vis. visit_label ( label) ) ;
961
- vis. visit_expr ( cond) ;
962
- vis. visit_block ( body) ;
963
- }
964
- ExprKind :: ForLoop { pat, iter, body, label, kind : _ } => {
965
- visit_opt ( label, |label| vis. visit_label ( label) ) ;
966
- vis. visit_pat ( pat) ;
967
- vis. visit_expr ( iter) ;
968
- vis. visit_block ( body) ;
969
- }
970
- ExprKind :: Loop ( body, label, span) => {
971
- visit_opt ( label, |label| vis. visit_label ( label) ) ;
972
- vis. visit_block ( body) ;
973
- vis. visit_span ( span) ;
974
- }
975
- ExprKind :: Match ( expr, arms, _kind) => {
976
- vis. visit_expr ( expr) ;
977
- arms. flat_map_in_place ( |arm| vis. flat_map_arm ( arm) ) ;
978
- }
979
- ExprKind :: Closure ( box Closure {
980
- binder,
981
- capture_clause,
982
- constness,
983
- coroutine_kind,
984
- movability : _,
985
- fn_decl,
986
- body,
987
- fn_decl_span,
988
- fn_arg_span,
989
- } ) => {
990
- visit_constness ( vis, constness) ;
991
- vis. visit_capture_by ( capture_clause) ;
992
- vis. visit_fn ( FnKind :: Closure ( binder, coroutine_kind, fn_decl, body) , * span, * id) ;
993
- vis. visit_span ( fn_decl_span) ;
994
- vis. visit_span ( fn_arg_span) ;
995
- }
996
- ExprKind :: Block ( blk, label) => {
997
- visit_opt ( label, |label| vis. visit_label ( label) ) ;
998
- vis. visit_block ( blk) ;
999
- }
1000
- ExprKind :: Gen ( _capture_by, body, _kind, decl_span) => {
1001
- vis. visit_block ( body) ;
1002
- vis. visit_span ( decl_span) ;
1003
- }
1004
- ExprKind :: Await ( expr, await_kw_span) => {
1005
- vis. visit_expr ( expr) ;
1006
- vis. visit_span ( await_kw_span) ;
1007
- }
1008
- ExprKind :: Use ( expr, use_kw_span) => {
1009
- vis. visit_expr ( expr) ;
1010
- vis. visit_span ( use_kw_span) ;
1011
- }
1012
- ExprKind :: Assign ( el, er, span) => {
1013
- vis. visit_expr ( el) ;
1014
- vis. visit_expr ( er) ;
1015
- vis. visit_span ( span) ;
1016
- }
1017
- ExprKind :: AssignOp ( _op, el, er) => {
1018
- vis. visit_expr ( el) ;
1019
- vis. visit_expr ( er) ;
1020
- }
1021
- ExprKind :: Field ( el, ident) => {
1022
- vis. visit_expr ( el) ;
1023
- vis. visit_ident ( ident) ;
1024
- }
1025
- ExprKind :: Index ( el, er, brackets_span) => {
1026
- vis. visit_expr ( el) ;
1027
- vis. visit_expr ( er) ;
1028
- vis. visit_span ( brackets_span) ;
1029
- }
1030
- ExprKind :: Range ( e1, e2, _lim) => {
1031
- visit_opt ( e1, |e1| vis. visit_expr ( e1) ) ;
1032
- visit_opt ( e2, |e2| vis. visit_expr ( e2) ) ;
1033
- }
1034
- ExprKind :: Underscore => { }
1035
- ExprKind :: Path ( qself, path) => {
1036
- vis. visit_qself ( qself) ;
1037
- vis. visit_path ( path) ;
1038
- }
1039
- ExprKind :: Break ( label, expr) => {
1040
- visit_opt ( label, |label| vis. visit_label ( label) ) ;
1041
- visit_opt ( expr, |expr| vis. visit_expr ( expr) ) ;
1042
- }
1043
- ExprKind :: Continue ( label) => {
1044
- visit_opt ( label, |label| vis. visit_label ( label) ) ;
1045
- }
1046
- ExprKind :: Ret ( expr) => {
1047
- visit_opt ( expr, |expr| vis. visit_expr ( expr) ) ;
1048
- }
1049
- ExprKind :: Yeet ( expr) => {
1050
- visit_opt ( expr, |expr| vis. visit_expr ( expr) ) ;
1051
- }
1052
- ExprKind :: Become ( expr) => vis. visit_expr ( expr) ,
1053
- ExprKind :: InlineAsm ( asm) => vis. visit_inline_asm ( asm) ,
1054
- ExprKind :: FormatArgs ( fmt) => vis. visit_format_args ( fmt) ,
1055
- ExprKind :: OffsetOf ( container, fields) => {
1056
- vis. visit_ty ( container) ;
1057
- for field in fields. iter_mut ( ) {
1058
- vis. visit_ident ( field) ;
1059
- }
1060
- }
1061
- ExprKind :: MacCall ( mac) => vis. visit_mac_call ( mac) ,
1062
- ExprKind :: Struct ( se) => {
1063
- let StructExpr { qself, path, fields, rest } = se. deref_mut ( ) ;
1064
- vis. visit_qself ( qself) ;
1065
- vis. visit_path ( path) ;
1066
- fields. flat_map_in_place ( |field| vis. flat_map_expr_field ( field) ) ;
1067
- match rest {
1068
- StructRest :: Base ( expr) => vis. visit_expr ( expr) ,
1069
- StructRest :: Rest ( _span) => { }
1070
- StructRest :: None => { }
1071
- }
1072
- }
1073
- ExprKind :: Paren ( expr) => {
1074
- vis. visit_expr ( expr) ;
1075
- }
1076
- ExprKind :: Yield ( kind) => {
1077
- let expr = kind. expr_mut ( ) ;
1078
- if let Some ( expr) = expr {
1079
- vis. visit_expr ( expr) ;
1080
- }
1081
- }
1082
- ExprKind :: Try ( expr) => vis. visit_expr ( expr) ,
1083
- ExprKind :: TryBlock ( body) => vis. visit_block ( body) ,
1084
- ExprKind :: Lit ( _token) => { }
1085
- ExprKind :: IncludedBytes ( _bytes) => { }
1086
- ExprKind :: UnsafeBinderCast ( _kind, expr, ty) => {
1087
- vis. visit_expr ( expr) ;
1088
- if let Some ( ty) = ty {
1089
- vis. visit_ty ( ty) ;
1090
- }
1091
- }
1092
- ExprKind :: Err ( _guar) => { }
1093
- ExprKind :: Dummy => { }
1094
- }
1095
- vis. visit_span ( span) ;
1096
- }
1097
-
1098
542
pub fn walk_filter_map_expr < T : MutVisitor > ( vis : & mut T , mut e : P < Expr > ) -> Option < P < Expr > > {
1099
543
vis. visit_expr ( & mut e) ;
1100
544
Some ( e)
@@ -1139,18 +583,6 @@ fn walk_flat_map_stmt_kind<T: MutVisitor>(vis: &mut T, kind: StmtKind) -> SmallV
1139
583
}
1140
584
}
1141
585
1142
- fn walk_vis < T : MutVisitor > ( vis : & mut T , visibility : & mut Visibility ) {
1143
- let Visibility { kind, span, tokens : _ } = visibility;
1144
- match kind {
1145
- VisibilityKind :: Public | VisibilityKind :: Inherited => { }
1146
- VisibilityKind :: Restricted { path, id, shorthand : _ } => {
1147
- vis. visit_id ( id) ;
1148
- vis. visit_path ( path) ;
1149
- }
1150
- }
1151
- vis. visit_span ( span) ;
1152
- }
1153
-
1154
586
fn walk_capture_by < T : MutVisitor > ( vis : & mut T , capture_by : & mut CaptureBy ) {
1155
587
match capture_by {
1156
588
CaptureBy :: Ref => { }
0 commit comments