9
9
10
10
use std:: ops:: DerefMut ;
11
11
use std:: panic;
12
- use std:: sync:: Arc ;
13
12
14
13
use rustc_data_structures:: flat_map_in_place:: FlatMapInPlace ;
15
14
use rustc_data_structures:: stack:: ensure_sufficient_stack;
@@ -20,7 +19,6 @@ use thin_vec::ThinVec;
20
19
21
20
use crate :: ast:: * ;
22
21
use crate :: ptr:: P ;
23
- use crate :: token:: { self , Token } ;
24
22
use crate :: tokenstream:: * ;
25
23
use crate :: visit:: { AssocCtxt , BoundKind , FnCtxt } ;
26
24
@@ -48,11 +46,6 @@ pub trait WalkItemKind {
48
46
}
49
47
50
48
pub trait MutVisitor : Sized {
51
- /// Mutable token visiting only exists for the `macro_rules` token marker and should not be
52
- /// used otherwise. Token visitor would be entirely separate from the regular visitor if
53
- /// the marker didn't have to visit AST fragments in nonterminal tokens.
54
- const VISIT_TOKENS : bool = false ;
55
-
56
49
// Methods in this trait have one of three forms:
57
50
//
58
51
// fn visit_t(&mut self, t: &mut T); // common
@@ -360,6 +353,8 @@ pub trait MutVisitor: Sized {
360
353
// Do nothing.
361
354
}
362
355
356
+ // Span visiting is no longer used, but we keep it for now,
357
+ // in case it's needed for something like #127241.
363
358
fn visit_span ( & mut self , _sp : & mut Span ) {
364
359
// Do nothing.
365
360
}
@@ -473,12 +468,8 @@ fn visit_attr_args<T: MutVisitor>(vis: &mut T, args: &mut AttrArgs) {
473
468
474
469
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
475
470
fn visit_delim_args < T : MutVisitor > ( vis : & mut T , args : & mut DelimArgs ) {
476
- let DelimArgs { dspan, delim : _, tokens } = args;
477
- visit_tts ( vis, tokens) ;
478
- visit_delim_span ( vis, dspan) ;
479
- }
480
-
481
- pub fn visit_delim_span < T : MutVisitor > ( vis : & mut T , DelimSpan { open, close } : & mut DelimSpan ) {
471
+ let DelimArgs { dspan, delim : _, tokens : _ } = args;
472
+ let DelimSpan { open, close } = dspan;
482
473
vis. visit_span ( open) ;
483
474
vis. visit_span ( close) ;
484
475
}
@@ -552,7 +543,7 @@ fn walk_assoc_item_constraint<T: MutVisitor>(
552
543
}
553
544
554
545
pub fn walk_ty < T : MutVisitor > ( vis : & mut T , ty : & mut P < Ty > ) {
555
- let Ty { id, kind, span, tokens } = ty. deref_mut ( ) ;
546
+ let Ty { id, kind, span, tokens : _ } = ty. deref_mut ( ) ;
556
547
vis. visit_id ( id) ;
557
548
match kind {
558
549
TyKind :: Err ( _guar) => { }
@@ -600,12 +591,11 @@ pub fn walk_ty<T: MutVisitor>(vis: &mut T, ty: &mut P<Ty>) {
600
591
}
601
592
TyKind :: MacCall ( mac) => vis. visit_mac_call ( mac) ,
602
593
}
603
- visit_lazy_tts ( vis, tokens) ;
604
594
vis. visit_span ( span) ;
605
595
}
606
596
607
597
pub fn walk_ty_pat < T : MutVisitor > ( vis : & mut T , ty : & mut P < TyPat > ) {
608
- let TyPat { id, kind, span, tokens } = ty. deref_mut ( ) ;
598
+ let TyPat { id, kind, span, tokens : _ } = ty. deref_mut ( ) ;
609
599
vis. visit_id ( id) ;
610
600
match kind {
611
601
TyPatKind :: Range ( start, end, _include_end) => {
@@ -615,7 +605,6 @@ pub fn walk_ty_pat<T: MutVisitor>(vis: &mut T, ty: &mut P<TyPat>) {
615
605
TyPatKind :: Or ( variants) => visit_thin_vec ( variants, |p| vis. visit_ty_pat ( p) ) ,
616
606
TyPatKind :: Err ( _) => { }
617
607
}
618
- visit_lazy_tts ( vis, tokens) ;
619
608
vis. visit_span ( span) ;
620
609
}
621
610
@@ -655,11 +644,10 @@ fn walk_path_segment<T: MutVisitor>(vis: &mut T, segment: &mut PathSegment) {
655
644
visit_opt ( args, |args| vis. visit_generic_args ( args) ) ;
656
645
}
657
646
658
- fn walk_path < T : MutVisitor > ( vis : & mut T , Path { segments, span, tokens } : & mut Path ) {
647
+ fn walk_path < T : MutVisitor > ( vis : & mut T , Path { segments, span, tokens : _ } : & mut Path ) {
659
648
for segment in segments {
660
649
vis. visit_path_segment ( segment) ;
661
650
}
662
- visit_lazy_tts ( vis, tokens) ;
663
651
vis. visit_span ( span) ;
664
652
}
665
653
@@ -705,7 +693,7 @@ fn walk_parenthesized_parameter_data<T: MutVisitor>(vis: &mut T, args: &mut Pare
705
693
}
706
694
707
695
fn walk_local < T : MutVisitor > ( vis : & mut T , local : & mut P < Local > ) {
708
- let Local { id, super_, pat, ty, kind, span, colon_sp, attrs, tokens } = local. deref_mut ( ) ;
696
+ let Local { id, super_, pat, ty, kind, span, colon_sp, attrs, tokens : _ } = local. deref_mut ( ) ;
709
697
visit_opt ( super_, |sp| vis. visit_span ( sp) ) ;
710
698
vis. visit_id ( id) ;
711
699
visit_attrs ( vis, attrs) ;
@@ -721,7 +709,6 @@ fn walk_local<T: MutVisitor>(vis: &mut T, local: &mut P<Local>) {
721
709
vis. visit_block ( els) ;
722
710
}
723
711
}
724
- visit_lazy_tts ( vis, tokens) ;
725
712
visit_opt ( colon_sp, |sp| vis. visit_span ( sp) ) ;
726
713
vis. visit_span ( span) ;
727
714
}
@@ -730,14 +717,10 @@ fn walk_attribute<T: MutVisitor>(vis: &mut T, attr: &mut Attribute) {
730
717
let Attribute { kind, id : _, style : _, span } = attr;
731
718
match kind {
732
719
AttrKind :: Normal ( normal) => {
733
- let NormalAttr {
734
- item : AttrItem { unsafety : _, path, args, tokens } ,
735
- tokens : attr_tokens,
736
- } = & mut * * normal;
720
+ let NormalAttr { item : AttrItem { unsafety : _, path, args, tokens : _ } , tokens : _ } =
721
+ & mut * * normal;
737
722
vis. visit_path ( path) ;
738
723
visit_attr_args ( vis, args) ;
739
- visit_lazy_tts ( vis, tokens) ;
740
- visit_lazy_tts ( vis, attr_tokens) ;
741
724
}
742
725
AttrKind :: DocComment ( _kind, _sym) => { }
743
726
}
@@ -786,90 +769,6 @@ pub fn walk_flat_map_param<T: MutVisitor>(vis: &mut T, mut param: Param) -> Smal
786
769
smallvec ! [ param]
787
770
}
788
771
789
- // No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
790
- fn visit_attr_tt < T : MutVisitor > ( vis : & mut T , tt : & mut AttrTokenTree ) {
791
- match tt {
792
- AttrTokenTree :: Token ( token, _spacing) => {
793
- visit_token ( vis, token) ;
794
- }
795
- AttrTokenTree :: Delimited ( dspan, _spacing, _delim, tts) => {
796
- visit_attr_tts ( vis, tts) ;
797
- visit_delim_span ( vis, dspan) ;
798
- }
799
- AttrTokenTree :: AttrsTarget ( AttrsTarget { attrs, tokens } ) => {
800
- visit_attrs ( vis, attrs) ;
801
- visit_lazy_tts_opt_mut ( vis, Some ( tokens) ) ;
802
- }
803
- }
804
- }
805
-
806
- // No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
807
- fn visit_tt < T : MutVisitor > ( vis : & mut T , tt : & mut TokenTree ) {
808
- match tt {
809
- TokenTree :: Token ( token, _spacing) => {
810
- visit_token ( vis, token) ;
811
- }
812
- TokenTree :: Delimited ( dspan, _spacing, _delim, tts) => {
813
- visit_tts ( vis, tts) ;
814
- visit_delim_span ( vis, dspan) ;
815
- }
816
- }
817
- }
818
-
819
- // No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
820
- fn visit_tts < T : MutVisitor > ( vis : & mut T , TokenStream ( tts) : & mut TokenStream ) {
821
- if T :: VISIT_TOKENS && !tts. is_empty ( ) {
822
- let tts = Arc :: make_mut ( tts) ;
823
- visit_vec ( tts, |tree| visit_tt ( vis, tree) ) ;
824
- }
825
- }
826
-
827
- fn visit_attr_tts < T : MutVisitor > ( vis : & mut T , AttrTokenStream ( tts) : & mut AttrTokenStream ) {
828
- if T :: VISIT_TOKENS && !tts. is_empty ( ) {
829
- let tts = Arc :: make_mut ( tts) ;
830
- visit_vec ( tts, |tree| visit_attr_tt ( vis, tree) ) ;
831
- }
832
- }
833
-
834
- fn visit_lazy_tts_opt_mut < T : MutVisitor > ( vis : & mut T , lazy_tts : Option < & mut LazyAttrTokenStream > ) {
835
- if T :: VISIT_TOKENS {
836
- if let Some ( lazy_tts) = lazy_tts {
837
- let mut tts = lazy_tts. to_attr_token_stream ( ) ;
838
- visit_attr_tts ( vis, & mut tts) ;
839
- * lazy_tts = LazyAttrTokenStream :: new_direct ( tts) ;
840
- }
841
- }
842
- }
843
-
844
- fn visit_lazy_tts < T : MutVisitor > ( vis : & mut T , lazy_tts : & mut Option < LazyAttrTokenStream > ) {
845
- visit_lazy_tts_opt_mut ( vis, lazy_tts. as_mut ( ) ) ;
846
- }
847
-
848
- /// Applies ident visitor if it's an ident. In practice this is not actually
849
- /// used by specific visitors right now, but there's a test below checking that
850
- /// it works.
851
- // No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
852
- pub fn visit_token < T : MutVisitor > ( vis : & mut T , t : & mut Token ) {
853
- let Token { kind, span } = t;
854
- match kind {
855
- token:: Ident ( name, _is_raw) | token:: Lifetime ( name, _is_raw) => {
856
- let mut ident = Ident :: new ( * name, * span) ;
857
- vis. visit_ident ( & mut ident) ;
858
- * name = ident. name ;
859
- * span = ident. span ;
860
- return ; // Avoid visiting the span for the second time.
861
- }
862
- token:: NtIdent ( ident, _is_raw) => {
863
- vis. visit_ident ( ident) ;
864
- }
865
- token:: NtLifetime ( ident, _is_raw) => {
866
- vis. visit_ident ( ident) ;
867
- }
868
- _ => { }
869
- }
870
- vis. visit_span ( span) ;
871
- }
872
-
873
772
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
874
773
fn visit_defaultness < T : MutVisitor > ( vis : & mut T , defaultness : & mut Defaultness ) {
875
774
match defaultness {
@@ -1188,10 +1087,9 @@ fn walk_mt<T: MutVisitor>(vis: &mut T, MutTy { ty, mutbl: _ }: &mut MutTy) {
1188
1087
}
1189
1088
1190
1089
pub fn walk_block < T : MutVisitor > ( vis : & mut T , block : & mut P < Block > ) {
1191
- let Block { id, stmts, rules : _, span, tokens } = block. deref_mut ( ) ;
1090
+ let Block { id, stmts, rules : _, span, tokens : _ } = block. deref_mut ( ) ;
1192
1091
vis. visit_id ( id) ;
1193
1092
stmts. flat_map_in_place ( |stmt| vis. flat_map_stmt ( stmt) ) ;
1194
- visit_lazy_tts ( vis, tokens) ;
1195
1093
vis. visit_span ( span) ;
1196
1094
}
1197
1095
@@ -1472,12 +1370,11 @@ fn walk_item_ctxt<K: WalkItemKind>(
1472
1370
item : & mut P < Item < K > > ,
1473
1371
ctxt : K :: Ctxt ,
1474
1372
) {
1475
- let Item { attrs, id, kind, vis, span, tokens } = item. deref_mut ( ) ;
1373
+ let Item { attrs, id, kind, vis, span, tokens : _ } = item. deref_mut ( ) ;
1476
1374
visitor. visit_id ( id) ;
1477
1375
visit_attrs ( visitor, attrs) ;
1478
1376
visitor. visit_vis ( vis) ;
1479
1377
kind. walk ( * span, * id, vis, ctxt, visitor) ;
1480
- visit_lazy_tts ( visitor, tokens) ;
1481
1378
visitor. visit_span ( span) ;
1482
1379
}
1483
1380
@@ -1551,7 +1448,7 @@ impl WalkItemKind for ForeignItemKind {
1551
1448
}
1552
1449
1553
1450
pub fn walk_pat < T : MutVisitor > ( vis : & mut T , pat : & mut P < Pat > ) {
1554
- let Pat { id, kind, span, tokens } = pat. deref_mut ( ) ;
1451
+ let Pat { id, kind, span, tokens : _ } = pat. deref_mut ( ) ;
1555
1452
vis. visit_id ( id) ;
1556
1453
match kind {
1557
1454
PatKind :: Err ( _guar) => { }
@@ -1593,7 +1490,6 @@ pub fn walk_pat<T: MutVisitor>(vis: &mut T, pat: &mut P<Pat>) {
1593
1490
PatKind :: Paren ( inner) => vis. visit_pat ( inner) ,
1594
1491
PatKind :: MacCall ( mac) => vis. visit_mac_call ( mac) ,
1595
1492
}
1596
- visit_lazy_tts ( vis, tokens) ;
1597
1493
vis. visit_span ( span) ;
1598
1494
}
1599
1495
@@ -1657,7 +1553,7 @@ fn walk_format_args<T: MutVisitor>(vis: &mut T, fmt: &mut FormatArgs) {
1657
1553
vis. visit_span ( span) ;
1658
1554
}
1659
1555
1660
- pub fn walk_expr < T : MutVisitor > ( vis : & mut T , Expr { kind, id, span, attrs, tokens } : & mut Expr ) {
1556
+ pub fn walk_expr < T : MutVisitor > ( vis : & mut T , Expr { kind, id, span, attrs, tokens : _ } : & mut Expr ) {
1661
1557
vis. visit_id ( id) ;
1662
1558
visit_attrs ( vis, attrs) ;
1663
1559
match kind {
@@ -1848,7 +1744,6 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
1848
1744
ExprKind :: Err ( _guar) => { }
1849
1745
ExprKind :: Dummy => { }
1850
1746
}
1851
- visit_lazy_tts ( vis, tokens) ;
1852
1747
vis. visit_span ( span) ;
1853
1748
}
1854
1749
@@ -1890,25 +1785,23 @@ fn walk_flat_map_stmt_kind<T: MutVisitor>(vis: &mut T, kind: StmtKind) -> SmallV
1890
1785
StmtKind :: Semi ( expr) => vis. filter_map_expr ( expr) . into_iter ( ) . map ( StmtKind :: Semi ) . collect ( ) ,
1891
1786
StmtKind :: Empty => smallvec ! [ StmtKind :: Empty ] ,
1892
1787
StmtKind :: MacCall ( mut mac) => {
1893
- let MacCallStmt { mac : mac_, style : _, attrs, tokens } = mac. deref_mut ( ) ;
1788
+ let MacCallStmt { mac : mac_, style : _, attrs, tokens : _ } = mac. deref_mut ( ) ;
1894
1789
visit_attrs ( vis, attrs) ;
1895
1790
vis. visit_mac_call ( mac_) ;
1896
- visit_lazy_tts ( vis, tokens) ;
1897
1791
smallvec ! [ StmtKind :: MacCall ( mac) ]
1898
1792
}
1899
1793
}
1900
1794
}
1901
1795
1902
1796
fn walk_vis < T : MutVisitor > ( vis : & mut T , visibility : & mut Visibility ) {
1903
- let Visibility { kind, span, tokens } = visibility;
1797
+ let Visibility { kind, span, tokens : _ } = visibility;
1904
1798
match kind {
1905
1799
VisibilityKind :: Public | VisibilityKind :: Inherited => { }
1906
1800
VisibilityKind :: Restricted { path, id, shorthand : _ } => {
1907
1801
vis. visit_id ( id) ;
1908
1802
vis. visit_path ( path) ;
1909
1803
}
1910
1804
}
1911
- visit_lazy_tts ( vis, tokens) ;
1912
1805
vis. visit_span ( span) ;
1913
1806
}
1914
1807
0 commit comments