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)  => { 
@@ -615,7 +605,6 @@ pub fn walk_ty_pat<T: MutVisitor>(vis: &mut T, ty: &mut P<TyPat>) {
615605        TyPatKind :: Or ( variants)  => visit_thin_vec ( variants,  |p| vis. visit_ty_pat ( p) ) , 
616606        TyPatKind :: Err ( _)  => { } 
617607    } 
618-     visit_lazy_tts ( vis,  tokens) ; 
619608    vis. visit_span ( span) ; 
620609} 
621610
@@ -655,11 +644,10 @@ fn walk_path_segment<T: MutVisitor>(vis: &mut T, segment: &mut PathSegment) {
655644    visit_opt ( args,  |args| vis. visit_generic_args ( args) ) ; 
656645} 
657646
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 )  { 
659648    for  segment in  segments { 
660649        vis. visit_path_segment ( segment) ; 
661650    } 
662-     visit_lazy_tts ( vis,  tokens) ; 
663651    vis. visit_span ( span) ; 
664652} 
665653
@@ -705,7 +693,7 @@ fn walk_parenthesized_parameter_data<T: MutVisitor>(vis: &mut T, args: &mut Pare
705693} 
706694
707695fn  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 ( ) ; 
709697    visit_opt ( super_,  |sp| vis. visit_span ( sp) ) ; 
710698    vis. visit_id ( id) ; 
711699    visit_attrs ( vis,  attrs) ; 
@@ -721,7 +709,6 @@ fn walk_local<T: MutVisitor>(vis: &mut T, local: &mut P<Local>) {
721709            vis. visit_block ( els) ; 
722710        } 
723711    } 
724-     visit_lazy_tts ( vis,  tokens) ; 
725712    visit_opt ( colon_sp,  |sp| vis. visit_span ( sp) ) ; 
726713    vis. visit_span ( span) ; 
727714} 
@@ -730,14 +717,10 @@ fn walk_attribute<T: MutVisitor>(vis: &mut T, attr: &mut Attribute) {
730717    let  Attribute  {  kind,  id :  _,  style :  _,  span }  = attr; 
731718    match  kind { 
732719        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; 
737722            vis. visit_path ( path) ; 
738723            visit_attr_args ( vis,  args) ; 
739-             visit_lazy_tts ( vis,  tokens) ; 
740-             visit_lazy_tts ( vis,  attr_tokens) ; 
741724        } 
742725        AttrKind :: DocComment ( _kind,  _sym)  => { } 
743726    } 
@@ -786,90 +769,6 @@ pub fn walk_flat_map_param<T: MutVisitor>(vis: &mut T, mut param: Param) -> Smal
786769    smallvec ! [ param] 
787770} 
788771
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- 
873772// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`. 
874773fn  visit_defaultness < T :  MutVisitor > ( vis :  & mut  T ,  defaultness :  & mut  Defaultness )  { 
875774    match  defaultness { 
@@ -1188,10 +1087,9 @@ fn walk_mt<T: MutVisitor>(vis: &mut T, MutTy { ty, mutbl: _ }: &mut MutTy) {
11881087} 
11891088
11901089pub  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 ( ) ; 
11921091    vis. visit_id ( id) ; 
11931092    stmts. flat_map_in_place ( |stmt| vis. flat_map_stmt ( stmt) ) ; 
1194-     visit_lazy_tts ( vis,  tokens) ; 
11951093    vis. visit_span ( span) ; 
11961094} 
11971095
@@ -1472,12 +1370,11 @@ fn walk_item_ctxt<K: WalkItemKind>(
14721370    item :  & mut  P < Item < K > > , 
14731371    ctxt :  K :: Ctxt , 
14741372)  { 
1475-     let  Item  {  attrs,  id,  kind,  vis,  span,  tokens }  = item. deref_mut ( ) ; 
1373+     let  Item  {  attrs,  id,  kind,  vis,  span,  tokens :  _  }  = item. deref_mut ( ) ; 
14761374    visitor. visit_id ( id) ; 
14771375    visit_attrs ( visitor,  attrs) ; 
14781376    visitor. visit_vis ( vis) ; 
14791377    kind. walk ( * span,  * id,  vis,  ctxt,  visitor) ; 
1480-     visit_lazy_tts ( visitor,  tokens) ; 
14811378    visitor. visit_span ( span) ; 
14821379} 
14831380
@@ -1551,7 +1448,7 @@ impl WalkItemKind for ForeignItemKind {
15511448} 
15521449
15531450pub  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 ( ) ; 
15551452    vis. visit_id ( id) ; 
15561453    match  kind { 
15571454        PatKind :: Err ( _guar)  => { } 
@@ -1593,7 +1490,6 @@ pub fn walk_pat<T: MutVisitor>(vis: &mut T, pat: &mut P<Pat>) {
15931490        PatKind :: Paren ( inner)  => vis. visit_pat ( inner) , 
15941491        PatKind :: MacCall ( mac)  => vis. visit_mac_call ( mac) , 
15951492    } 
1596-     visit_lazy_tts ( vis,  tokens) ; 
15971493    vis. visit_span ( span) ; 
15981494} 
15991495
@@ -1657,7 +1553,7 @@ fn walk_format_args<T: MutVisitor>(vis: &mut T, fmt: &mut FormatArgs) {
16571553    vis. visit_span ( span) ; 
16581554} 
16591555
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 )  { 
16611557    vis. visit_id ( id) ; 
16621558    visit_attrs ( vis,  attrs) ; 
16631559    match  kind { 
@@ -1848,7 +1744,6 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
18481744        ExprKind :: Err ( _guar)  => { } 
18491745        ExprKind :: Dummy  => { } 
18501746    } 
1851-     visit_lazy_tts ( vis,  tokens) ; 
18521747    vis. visit_span ( span) ; 
18531748} 
18541749
@@ -1890,25 +1785,23 @@ fn walk_flat_map_stmt_kind<T: MutVisitor>(vis: &mut T, kind: StmtKind) -> SmallV
18901785        StmtKind :: Semi ( expr)  => vis. filter_map_expr ( expr) . into_iter ( ) . map ( StmtKind :: Semi ) . collect ( ) , 
18911786        StmtKind :: Empty  => smallvec ! [ StmtKind :: Empty ] , 
18921787        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 ( ) ; 
18941789            visit_attrs ( vis,  attrs) ; 
18951790            vis. visit_mac_call ( mac_) ; 
1896-             visit_lazy_tts ( vis,  tokens) ; 
18971791            smallvec ! [ StmtKind :: MacCall ( mac) ] 
18981792        } 
18991793    } 
19001794} 
19011795
19021796fn  walk_vis < T :  MutVisitor > ( vis :  & mut  T ,  visibility :  & mut  Visibility )  { 
1903-     let  Visibility  {  kind,  span,  tokens }  = visibility; 
1797+     let  Visibility  {  kind,  span,  tokens :  _  }  = visibility; 
19041798    match  kind { 
19051799        VisibilityKind :: Public  | VisibilityKind :: Inherited  => { } 
19061800        VisibilityKind :: Restricted  {  path,  id,  shorthand :  _ }  => { 
19071801            vis. visit_id ( id) ; 
19081802            vis. visit_path ( path) ; 
19091803        } 
19101804    } 
1911-     visit_lazy_tts ( vis,  tokens) ; 
19121805    vis. visit_span ( span) ; 
19131806} 
19141807
0 commit comments