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) => {
@@ -614,7 +604,6 @@ pub fn walk_ty_pat<T: MutVisitor>(vis: &mut T, ty: &mut P<TyPat>) {
614
604
}
615
605
TyPatKind :: Err ( _) => { }
616
606
}
617
- visit_lazy_tts ( vis, tokens) ;
618
607
vis. visit_span ( span) ;
619
608
}
620
609
@@ -654,11 +643,10 @@ fn walk_path_segment<T: MutVisitor>(vis: &mut T, segment: &mut PathSegment) {
654
643
visit_opt ( args, |args| vis. visit_generic_args ( args) ) ;
655
644
}
656
645
657
- fn walk_path < T : MutVisitor > ( vis : & mut T , Path { segments, span, tokens } : & mut Path ) {
646
+ fn walk_path < T : MutVisitor > ( vis : & mut T , Path { segments, span, tokens : _ } : & mut Path ) {
658
647
for segment in segments {
659
648
vis. visit_path_segment ( segment) ;
660
649
}
661
- visit_lazy_tts ( vis, tokens) ;
662
650
vis. visit_span ( span) ;
663
651
}
664
652
@@ -704,7 +692,7 @@ fn walk_parenthesized_parameter_data<T: MutVisitor>(vis: &mut T, args: &mut Pare
704
692
}
705
693
706
694
fn walk_local < T : MutVisitor > ( vis : & mut T , local : & mut P < Local > ) {
707
- let Local { id, super_, pat, ty, kind, span, colon_sp, attrs, tokens } = local. deref_mut ( ) ;
695
+ let Local { id, super_, pat, ty, kind, span, colon_sp, attrs, tokens : _ } = local. deref_mut ( ) ;
708
696
visit_opt ( super_, |sp| vis. visit_span ( sp) ) ;
709
697
vis. visit_id ( id) ;
710
698
visit_attrs ( vis, attrs) ;
@@ -720,7 +708,6 @@ fn walk_local<T: MutVisitor>(vis: &mut T, local: &mut P<Local>) {
720
708
vis. visit_block ( els) ;
721
709
}
722
710
}
723
- visit_lazy_tts ( vis, tokens) ;
724
711
visit_opt ( colon_sp, |sp| vis. visit_span ( sp) ) ;
725
712
vis. visit_span ( span) ;
726
713
}
@@ -729,14 +716,10 @@ fn walk_attribute<T: MutVisitor>(vis: &mut T, attr: &mut Attribute) {
729
716
let Attribute { kind, id : _, style : _, span } = attr;
730
717
match kind {
731
718
AttrKind :: Normal ( normal) => {
732
- let NormalAttr {
733
- item : AttrItem { unsafety : _, path, args, tokens } ,
734
- tokens : attr_tokens,
735
- } = & mut * * normal;
719
+ let NormalAttr { item : AttrItem { unsafety : _, path, args, tokens : _ } , tokens : _ } =
720
+ & mut * * normal;
736
721
vis. visit_path ( path) ;
737
722
visit_attr_args ( vis, args) ;
738
- visit_lazy_tts ( vis, tokens) ;
739
- visit_lazy_tts ( vis, attr_tokens) ;
740
723
}
741
724
AttrKind :: DocComment ( _kind, _sym) => { }
742
725
}
@@ -785,90 +768,6 @@ pub fn walk_flat_map_param<T: MutVisitor>(vis: &mut T, mut param: Param) -> Smal
785
768
smallvec ! [ param]
786
769
}
787
770
788
- // No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
789
- fn visit_attr_tt < T : MutVisitor > ( vis : & mut T , tt : & mut AttrTokenTree ) {
790
- match tt {
791
- AttrTokenTree :: Token ( token, _spacing) => {
792
- visit_token ( vis, token) ;
793
- }
794
- AttrTokenTree :: Delimited ( dspan, _spacing, _delim, tts) => {
795
- visit_attr_tts ( vis, tts) ;
796
- visit_delim_span ( vis, dspan) ;
797
- }
798
- AttrTokenTree :: AttrsTarget ( AttrsTarget { attrs, tokens } ) => {
799
- visit_attrs ( vis, attrs) ;
800
- visit_lazy_tts_opt_mut ( vis, Some ( tokens) ) ;
801
- }
802
- }
803
- }
804
-
805
- // No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
806
- fn visit_tt < T : MutVisitor > ( vis : & mut T , tt : & mut TokenTree ) {
807
- match tt {
808
- TokenTree :: Token ( token, _spacing) => {
809
- visit_token ( vis, token) ;
810
- }
811
- TokenTree :: Delimited ( dspan, _spacing, _delim, tts) => {
812
- visit_tts ( vis, tts) ;
813
- visit_delim_span ( vis, dspan) ;
814
- }
815
- }
816
- }
817
-
818
- // No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
819
- fn visit_tts < T : MutVisitor > ( vis : & mut T , TokenStream ( tts) : & mut TokenStream ) {
820
- if T :: VISIT_TOKENS && !tts. is_empty ( ) {
821
- let tts = Arc :: make_mut ( tts) ;
822
- visit_vec ( tts, |tree| visit_tt ( vis, tree) ) ;
823
- }
824
- }
825
-
826
- fn visit_attr_tts < T : MutVisitor > ( vis : & mut T , AttrTokenStream ( tts) : & mut AttrTokenStream ) {
827
- if T :: VISIT_TOKENS && !tts. is_empty ( ) {
828
- let tts = Arc :: make_mut ( tts) ;
829
- visit_vec ( tts, |tree| visit_attr_tt ( vis, tree) ) ;
830
- }
831
- }
832
-
833
- fn visit_lazy_tts_opt_mut < T : MutVisitor > ( vis : & mut T , lazy_tts : Option < & mut LazyAttrTokenStream > ) {
834
- if T :: VISIT_TOKENS {
835
- if let Some ( lazy_tts) = lazy_tts {
836
- let mut tts = lazy_tts. to_attr_token_stream ( ) ;
837
- visit_attr_tts ( vis, & mut tts) ;
838
- * lazy_tts = LazyAttrTokenStream :: new ( tts) ;
839
- }
840
- }
841
- }
842
-
843
- fn visit_lazy_tts < T : MutVisitor > ( vis : & mut T , lazy_tts : & mut Option < LazyAttrTokenStream > ) {
844
- visit_lazy_tts_opt_mut ( vis, lazy_tts. as_mut ( ) ) ;
845
- }
846
-
847
- /// Applies ident visitor if it's an ident. In practice this is not actually
848
- /// used by specific visitors right now, but there's a test below checking that
849
- /// it works.
850
- // No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
851
- pub fn visit_token < T : MutVisitor > ( vis : & mut T , t : & mut Token ) {
852
- let Token { kind, span } = t;
853
- match kind {
854
- token:: Ident ( name, _is_raw) | token:: Lifetime ( name, _is_raw) => {
855
- let mut ident = Ident :: new ( * name, * span) ;
856
- vis. visit_ident ( & mut ident) ;
857
- * name = ident. name ;
858
- * span = ident. span ;
859
- return ; // Avoid visiting the span for the second time.
860
- }
861
- token:: NtIdent ( ident, _is_raw) => {
862
- vis. visit_ident ( ident) ;
863
- }
864
- token:: NtLifetime ( ident, _is_raw) => {
865
- vis. visit_ident ( ident) ;
866
- }
867
- _ => { }
868
- }
869
- vis. visit_span ( span) ;
870
- }
871
-
872
771
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
873
772
fn visit_defaultness < T : MutVisitor > ( vis : & mut T , defaultness : & mut Defaultness ) {
874
773
match defaultness {
@@ -1187,10 +1086,9 @@ fn walk_mt<T: MutVisitor>(vis: &mut T, MutTy { ty, mutbl: _ }: &mut MutTy) {
1187
1086
}
1188
1087
1189
1088
pub fn walk_block < T : MutVisitor > ( vis : & mut T , block : & mut P < Block > ) {
1190
- let Block { id, stmts, rules : _, span, tokens } = block. deref_mut ( ) ;
1089
+ let Block { id, stmts, rules : _, span, tokens : _ } = block. deref_mut ( ) ;
1191
1090
vis. visit_id ( id) ;
1192
1091
stmts. flat_map_in_place ( |stmt| vis. flat_map_stmt ( stmt) ) ;
1193
- visit_lazy_tts ( vis, tokens) ;
1194
1092
vis. visit_span ( span) ;
1195
1093
}
1196
1094
@@ -1471,12 +1369,11 @@ fn walk_item_ctxt<K: WalkItemKind>(
1471
1369
item : & mut P < Item < K > > ,
1472
1370
ctxt : K :: Ctxt ,
1473
1371
) {
1474
- let Item { attrs, id, kind, vis, span, tokens } = item. deref_mut ( ) ;
1372
+ let Item { attrs, id, kind, vis, span, tokens : _ } = item. deref_mut ( ) ;
1475
1373
visitor. visit_id ( id) ;
1476
1374
visit_attrs ( visitor, attrs) ;
1477
1375
visitor. visit_vis ( vis) ;
1478
1376
kind. walk ( * span, * id, vis, ctxt, visitor) ;
1479
- visit_lazy_tts ( visitor, tokens) ;
1480
1377
visitor. visit_span ( span) ;
1481
1378
}
1482
1379
@@ -1550,7 +1447,7 @@ impl WalkItemKind for ForeignItemKind {
1550
1447
}
1551
1448
1552
1449
pub fn walk_pat < T : MutVisitor > ( vis : & mut T , pat : & mut P < Pat > ) {
1553
- let Pat { id, kind, span, tokens } = pat. deref_mut ( ) ;
1450
+ let Pat { id, kind, span, tokens : _ } = pat. deref_mut ( ) ;
1554
1451
vis. visit_id ( id) ;
1555
1452
match kind {
1556
1453
PatKind :: Err ( _guar) => { }
@@ -1592,7 +1489,6 @@ pub fn walk_pat<T: MutVisitor>(vis: &mut T, pat: &mut P<Pat>) {
1592
1489
PatKind :: Paren ( inner) => vis. visit_pat ( inner) ,
1593
1490
PatKind :: MacCall ( mac) => vis. visit_mac_call ( mac) ,
1594
1491
}
1595
- visit_lazy_tts ( vis, tokens) ;
1596
1492
vis. visit_span ( span) ;
1597
1493
}
1598
1494
@@ -1656,7 +1552,7 @@ fn walk_format_args<T: MutVisitor>(vis: &mut T, fmt: &mut FormatArgs) {
1656
1552
vis. visit_span ( span) ;
1657
1553
}
1658
1554
1659
- pub fn walk_expr < T : MutVisitor > ( vis : & mut T , Expr { kind, id, span, attrs, tokens } : & mut Expr ) {
1555
+ pub fn walk_expr < T : MutVisitor > ( vis : & mut T , Expr { kind, id, span, attrs, tokens : _ } : & mut Expr ) {
1660
1556
vis. visit_id ( id) ;
1661
1557
visit_attrs ( vis, attrs) ;
1662
1558
match kind {
@@ -1847,7 +1743,6 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
1847
1743
ExprKind :: Err ( _guar) => { }
1848
1744
ExprKind :: Dummy => { }
1849
1745
}
1850
- visit_lazy_tts ( vis, tokens) ;
1851
1746
vis. visit_span ( span) ;
1852
1747
}
1853
1748
@@ -1889,25 +1784,23 @@ fn walk_flat_map_stmt_kind<T: MutVisitor>(vis: &mut T, kind: StmtKind) -> SmallV
1889
1784
StmtKind :: Semi ( expr) => vis. filter_map_expr ( expr) . into_iter ( ) . map ( StmtKind :: Semi ) . collect ( ) ,
1890
1785
StmtKind :: Empty => smallvec ! [ StmtKind :: Empty ] ,
1891
1786
StmtKind :: MacCall ( mut mac) => {
1892
- let MacCallStmt { mac : mac_, style : _, attrs, tokens } = mac. deref_mut ( ) ;
1787
+ let MacCallStmt { mac : mac_, style : _, attrs, tokens : _ } = mac. deref_mut ( ) ;
1893
1788
visit_attrs ( vis, attrs) ;
1894
1789
vis. visit_mac_call ( mac_) ;
1895
- visit_lazy_tts ( vis, tokens) ;
1896
1790
smallvec ! [ StmtKind :: MacCall ( mac) ]
1897
1791
}
1898
1792
}
1899
1793
}
1900
1794
1901
1795
fn walk_vis < T : MutVisitor > ( vis : & mut T , visibility : & mut Visibility ) {
1902
- let Visibility { kind, span, tokens } = visibility;
1796
+ let Visibility { kind, span, tokens : _ } = visibility;
1903
1797
match kind {
1904
1798
VisibilityKind :: Public | VisibilityKind :: Inherited => { }
1905
1799
VisibilityKind :: Restricted { path, id, shorthand : _ } => {
1906
1800
vis. visit_id ( id) ;
1907
1801
vis. visit_path ( path) ;
1908
1802
}
1909
1803
}
1910
- visit_lazy_tts ( vis, tokens) ;
1911
1804
vis. visit_span ( span) ;
1912
1805
}
1913
1806
0 commit comments