99
1010use std:: ops:: DerefMut ;
1111use std:: panic;
12- use std:: sync:: Arc ;
1312
1413use rustc_data_structures:: flat_map_in_place:: FlatMapInPlace ;
1514use rustc_data_structures:: stack:: ensure_sufficient_stack;
@@ -20,7 +19,6 @@ use thin_vec::ThinVec;
2019
2120use crate :: ast:: * ;
2221use crate :: ptr:: P ;
23- use crate :: token:: { self , Token } ;
2422use crate :: tokenstream:: * ;
2523use crate :: visit:: { AssocCtxt , BoundKind , FnCtxt } ;
2624
@@ -48,11 +46,6 @@ pub trait WalkItemKind {
4846}
4947
5048pub 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-
5649 // Methods in this trait have one of three forms:
5750 //
5851 // fn visit_t(&mut self, t: &mut T); // common
@@ -360,6 +353,8 @@ pub trait MutVisitor: Sized {
360353 // Do nothing.
361354 }
362355
356+ // Span visiting is no longer used, but we keep it for now,
357+ // in case it's needed for something like #127241.
363358 fn visit_span ( & mut self , _sp : & mut Span ) {
364359 // Do nothing.
365360 }
@@ -473,12 +468,8 @@ fn visit_attr_args<T: MutVisitor>(vis: &mut T, args: &mut AttrArgs) {
473468
474469// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
475470fn 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;
482473 vis. visit_span ( open) ;
483474 vis. visit_span ( close) ;
484475}
@@ -552,7 +543,7 @@ fn walk_assoc_item_constraint<T: MutVisitor>(
552543}
553544
554545pub 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 ( ) ;
556547 vis. visit_id ( id) ;
557548 match kind {
558549 TyKind :: Err ( _guar) => { }
@@ -600,12 +591,11 @@ pub fn walk_ty<T: MutVisitor>(vis: &mut T, ty: &mut P<Ty>) {
600591 }
601592 TyKind :: MacCall ( mac) => vis. visit_mac_call ( mac) ,
602593 }
603- visit_lazy_tts ( vis, tokens) ;
604594 vis. visit_span ( span) ;
605595}
606596
607597pub 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 ( ) ;
609599 vis. visit_id ( id) ;
610600 match kind {
611601 TyPatKind :: Range ( start, end, _include_end) => {
@@ -614,7 +604,6 @@ pub fn walk_ty_pat<T: MutVisitor>(vis: &mut T, ty: &mut P<TyPat>) {
614604 }
615605 TyPatKind :: Err ( _) => { }
616606 }
617- visit_lazy_tts ( vis, tokens) ;
618607 vis. visit_span ( span) ;
619608}
620609
@@ -654,11 +643,10 @@ fn walk_path_segment<T: MutVisitor>(vis: &mut T, segment: &mut PathSegment) {
654643 visit_opt ( args, |args| vis. visit_generic_args ( args) ) ;
655644}
656645
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 ) {
658647 for segment in segments {
659648 vis. visit_path_segment ( segment) ;
660649 }
661- visit_lazy_tts ( vis, tokens) ;
662650 vis. visit_span ( span) ;
663651}
664652
@@ -704,7 +692,7 @@ fn walk_parenthesized_parameter_data<T: MutVisitor>(vis: &mut T, args: &mut Pare
704692}
705693
706694fn 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 ( ) ;
708696 visit_opt ( super_, |sp| vis. visit_span ( sp) ) ;
709697 vis. visit_id ( id) ;
710698 visit_attrs ( vis, attrs) ;
@@ -720,7 +708,6 @@ fn walk_local<T: MutVisitor>(vis: &mut T, local: &mut P<Local>) {
720708 vis. visit_block ( els) ;
721709 }
722710 }
723- visit_lazy_tts ( vis, tokens) ;
724711 visit_opt ( colon_sp, |sp| vis. visit_span ( sp) ) ;
725712 vis. visit_span ( span) ;
726713}
@@ -729,14 +716,10 @@ fn walk_attribute<T: MutVisitor>(vis: &mut T, attr: &mut Attribute) {
729716 let Attribute { kind, id : _, style : _, span } = attr;
730717 match kind {
731718 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;
736721 vis. visit_path ( path) ;
737722 visit_attr_args ( vis, args) ;
738- visit_lazy_tts ( vis, tokens) ;
739- visit_lazy_tts ( vis, attr_tokens) ;
740723 }
741724 AttrKind :: DocComment ( _kind, _sym) => { }
742725 }
@@ -785,90 +768,6 @@ pub fn walk_flat_map_param<T: MutVisitor>(vis: &mut T, mut param: Param) -> Smal
785768 smallvec ! [ param]
786769}
787770
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-
872771// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
873772fn visit_defaultness < T : MutVisitor > ( vis : & mut T , defaultness : & mut Defaultness ) {
874773 match defaultness {
@@ -1187,10 +1086,9 @@ fn walk_mt<T: MutVisitor>(vis: &mut T, MutTy { ty, mutbl: _ }: &mut MutTy) {
11871086}
11881087
11891088pub 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 ( ) ;
11911090 vis. visit_id ( id) ;
11921091 stmts. flat_map_in_place ( |stmt| vis. flat_map_stmt ( stmt) ) ;
1193- visit_lazy_tts ( vis, tokens) ;
11941092 vis. visit_span ( span) ;
11951093}
11961094
@@ -1471,12 +1369,11 @@ fn walk_item_ctxt<K: WalkItemKind>(
14711369 item : & mut P < Item < K > > ,
14721370 ctxt : K :: Ctxt ,
14731371) {
1474- let Item { attrs, id, kind, vis, span, tokens } = item. deref_mut ( ) ;
1372+ let Item { attrs, id, kind, vis, span, tokens : _ } = item. deref_mut ( ) ;
14751373 visitor. visit_id ( id) ;
14761374 visit_attrs ( visitor, attrs) ;
14771375 visitor. visit_vis ( vis) ;
14781376 kind. walk ( * span, * id, vis, ctxt, visitor) ;
1479- visit_lazy_tts ( visitor, tokens) ;
14801377 visitor. visit_span ( span) ;
14811378}
14821379
@@ -1550,7 +1447,7 @@ impl WalkItemKind for ForeignItemKind {
15501447}
15511448
15521449pub 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 ( ) ;
15541451 vis. visit_id ( id) ;
15551452 match kind {
15561453 PatKind :: Err ( _guar) => { }
@@ -1592,7 +1489,6 @@ pub fn walk_pat<T: MutVisitor>(vis: &mut T, pat: &mut P<Pat>) {
15921489 PatKind :: Paren ( inner) => vis. visit_pat ( inner) ,
15931490 PatKind :: MacCall ( mac) => vis. visit_mac_call ( mac) ,
15941491 }
1595- visit_lazy_tts ( vis, tokens) ;
15961492 vis. visit_span ( span) ;
15971493}
15981494
@@ -1656,7 +1552,7 @@ fn walk_format_args<T: MutVisitor>(vis: &mut T, fmt: &mut FormatArgs) {
16561552 vis. visit_span ( span) ;
16571553}
16581554
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 ) {
16601556 vis. visit_id ( id) ;
16611557 visit_attrs ( vis, attrs) ;
16621558 match kind {
@@ -1847,7 +1743,6 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
18471743 ExprKind :: Err ( _guar) => { }
18481744 ExprKind :: Dummy => { }
18491745 }
1850- visit_lazy_tts ( vis, tokens) ;
18511746 vis. visit_span ( span) ;
18521747}
18531748
@@ -1889,25 +1784,23 @@ fn walk_flat_map_stmt_kind<T: MutVisitor>(vis: &mut T, kind: StmtKind) -> SmallV
18891784 StmtKind :: Semi ( expr) => vis. filter_map_expr ( expr) . into_iter ( ) . map ( StmtKind :: Semi ) . collect ( ) ,
18901785 StmtKind :: Empty => smallvec ! [ StmtKind :: Empty ] ,
18911786 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 ( ) ;
18931788 visit_attrs ( vis, attrs) ;
18941789 vis. visit_mac_call ( mac_) ;
1895- visit_lazy_tts ( vis, tokens) ;
18961790 smallvec ! [ StmtKind :: MacCall ( mac) ]
18971791 }
18981792 }
18991793}
19001794
19011795fn walk_vis < T : MutVisitor > ( vis : & mut T , visibility : & mut Visibility ) {
1902- let Visibility { kind, span, tokens } = visibility;
1796+ let Visibility { kind, span, tokens : _ } = visibility;
19031797 match kind {
19041798 VisibilityKind :: Public | VisibilityKind :: Inherited => { }
19051799 VisibilityKind :: Restricted { path, id, shorthand : _ } => {
19061800 vis. visit_id ( id) ;
19071801 vis. visit_path ( path) ;
19081802 }
19091803 }
1910- visit_lazy_tts ( vis, tokens) ;
19111804 vis. visit_span ( span) ;
19121805}
19131806
0 commit comments