@@ -416,6 +416,16 @@ macro_rules! make_ast_visitor {
416416 }
417417 }
418418
419+ macro_rules! visit_safety {
420+ ( $vis: expr, $safety: expr) => {
421+ if_mut_expr!(
422+ visit_safety( $vis, $safety)
423+ ,
424+ // assign to _ to prevent unused_variable warnings
425+ { let _ = ( & $vis, & $safety) ; }
426+ ) ;
427+ }
428+ }
419429
420430 // FIXME: should only exist while Visitor::visit_ident
421431 // doesn't receives a reference
@@ -1067,6 +1077,77 @@ macro_rules! make_ast_visitor {
10671077 return_result!( V )
10681078 }
10691079
1080+ pub fn walk_ty<$( $lt, ) ? V : $trait$( <$lt>) ?>(
1081+ vis: & mut V ,
1082+ ty: ref_t!( P !( Ty ) )
1083+ ) -> result!( V ) {
1084+ let Ty { id, kind, span, tokens } = deref_P!( ty) ;
1085+ try_v!( visit_id!( vis, id) ) ;
1086+ match kind {
1087+ TyKind :: Err ( _guar) => { }
1088+ TyKind :: Infer
1089+ | TyKind :: ImplicitSelf
1090+ | TyKind :: Dummy
1091+ | TyKind :: Never
1092+ | TyKind :: CVarArgs => { }
1093+ TyKind :: Slice ( ty) => {
1094+ try_v!( vis. visit_ty( ty) ) ;
1095+ }
1096+ TyKind :: Ptr ( mt) => {
1097+ try_v!( vis. visit_mt( mt) ) ;
1098+ }
1099+ TyKind :: Ref ( lt, mt) => {
1100+ visit_o!( lt, |lt| vis. visit_lifetime( lt, LifetimeCtxt :: Ref ) ) ;
1101+ try_v!( vis. visit_mt( mt) ) ;
1102+ }
1103+ TyKind :: BareFn ( bft) => {
1104+ let BareFnTy { safety, ext: _, generic_params, decl, decl_span } = & $( $mut) ? * * bft;
1105+ visit_safety!( vis, safety) ;
1106+ visit_list!( vis, visit_generic_param, flat_map_generic_param, generic_params) ;
1107+ try_v!( vis. visit_fn_decl( decl) ) ;
1108+ try_v!( visit_span!( vis, decl_span) ) ;
1109+ }
1110+ TyKind :: Tup ( tys) => {
1111+ visit_list!( vis, visit_ty, tys) ;
1112+ }
1113+ TyKind :: Paren ( ty) => {
1114+ try_v!( vis. visit_ty( ty) )
1115+ }
1116+ TyKind :: Pat ( ty, pat) => {
1117+ try_v!( vis. visit_ty( ty) ) ;
1118+ try_v!( vis. visit_pat( pat) ) ;
1119+ }
1120+ TyKind :: Path ( qself, path) => {
1121+ try_v!( vis. visit_qself( qself) ) ;
1122+ try_v!( vis. visit_path( path, * id) ) ;
1123+ }
1124+ TyKind :: Array ( ty, length) => {
1125+ try_v!( vis. visit_ty( ty) ) ;
1126+ try_v!( vis. visit_anon_const( length) ) ;
1127+ }
1128+ TyKind :: Typeof ( expr) => {
1129+ try_v!( vis. visit_anon_const( expr) ) ;
1130+ } ,
1131+ TyKind :: TraitObject ( bounds, _syntax) => {
1132+ visit_list!( vis, visit_param_bound, bounds; BoundKind :: TraitObject ) ;
1133+ }
1134+ TyKind :: ImplTrait ( id, bounds) => {
1135+ try_v!( visit_id!( vis, id) ) ;
1136+ visit_list!( vis, visit_param_bound, bounds; BoundKind :: Impl ) ;
1137+ }
1138+ TyKind :: MacCall ( mac) => {
1139+ try_v!( vis. visit_mac_call( mac) )
1140+ }
1141+ TyKind :: AnonStruct ( id, fields) | TyKind :: AnonUnion ( id, fields) => {
1142+ try_v!( visit_id!( vis, id) ) ;
1143+ visit_list!( vis, visit_field_def, flat_map_field_def, fields) ;
1144+ }
1145+ }
1146+ visit_lazy_tts!( vis, tokens) ;
1147+ try_v!( visit_span!( vis, span) ) ;
1148+ return_result!( V )
1149+ }
1150+
10701151 derive_copy_clone!{
10711152 #[ derive( Debug ) ]
10721153 pub enum FnKind <' a> {
@@ -1335,54 +1416,6 @@ pub mod visit {
13351416 V :: Result :: output ( )
13361417 }
13371418
1338- pub fn walk_ty < ' a , V : Visitor < ' a > > ( visitor : & mut V , typ : & ' a Ty ) -> V :: Result {
1339- let Ty { id, kind, span : _, tokens : _ } = typ;
1340- match kind {
1341- TyKind :: Slice ( ty) | TyKind :: Paren ( ty) => try_visit ! ( visitor. visit_ty( ty) ) ,
1342- TyKind :: Ptr ( mt) => try_visit ! ( visitor. visit_mt( mt) ) ,
1343- TyKind :: Ref ( opt_lifetime, mt) => {
1344- visit_opt ! ( visitor, visit_lifetime, opt_lifetime, LifetimeCtxt :: Ref ) ;
1345- try_visit ! ( visitor. visit_mt( mt) ) ;
1346- }
1347- TyKind :: Tup ( tuple_element_types) => {
1348- walk_list ! ( visitor, visit_ty, tuple_element_types) ;
1349- }
1350- TyKind :: BareFn ( function_declaration) => {
1351- let BareFnTy { safety : _, ext : _, generic_params, decl, decl_span : _ } =
1352- & * * function_declaration;
1353- walk_list ! ( visitor, visit_generic_param, generic_params) ;
1354- try_visit ! ( visitor. visit_fn_decl( decl) ) ;
1355- }
1356- TyKind :: Path ( maybe_qself, path) => {
1357- try_visit ! ( visitor. visit_qself( maybe_qself) ) ;
1358- try_visit ! ( visitor. visit_path( path, * id) ) ;
1359- }
1360- TyKind :: Pat ( ty, pat) => {
1361- try_visit ! ( visitor. visit_ty( ty) ) ;
1362- try_visit ! ( visitor. visit_pat( pat) ) ;
1363- }
1364- TyKind :: Array ( ty, length) => {
1365- try_visit ! ( visitor. visit_ty( ty) ) ;
1366- try_visit ! ( visitor. visit_anon_const( length) ) ;
1367- }
1368- TyKind :: TraitObject ( bounds, _syntax) => {
1369- walk_list ! ( visitor, visit_param_bound, bounds, BoundKind :: TraitObject ) ;
1370- }
1371- TyKind :: ImplTrait ( _id, bounds) => {
1372- walk_list ! ( visitor, visit_param_bound, bounds, BoundKind :: Impl ) ;
1373- }
1374- TyKind :: Typeof ( expression) => try_visit ! ( visitor. visit_anon_const( expression) ) ,
1375- TyKind :: Infer | TyKind :: ImplicitSelf | TyKind :: Dummy => { }
1376- TyKind :: Err ( _guar) => { }
1377- TyKind :: MacCall ( mac) => try_visit ! ( visitor. visit_mac_call( mac) ) ,
1378- TyKind :: Never | TyKind :: CVarArgs => { }
1379- TyKind :: AnonStruct ( _id, ref fields) | TyKind :: AnonUnion ( _id, ref fields) => {
1380- walk_list ! ( visitor, visit_field_def, fields) ;
1381- }
1382- }
1383- V :: Result :: output ( )
1384- }
1385-
13861419 pub fn walk_assoc_item_constraint < ' a , V : Visitor < ' a > > (
13871420 visitor : & mut V ,
13881421 constraint : & ' a AssocItemConstraint ,
@@ -1942,61 +1975,6 @@ pub mod mut_visit {
19421975 vis. visit_span ( span) ;
19431976 }
19441977
1945- pub fn walk_ty < T : MutVisitor > ( vis : & mut T , ty : & mut P < Ty > ) {
1946- let Ty { id, kind, span, tokens } = ty. deref_mut ( ) ;
1947- vis. visit_id ( id) ;
1948- match kind {
1949- TyKind :: Err ( _guar) => { }
1950- TyKind :: Infer
1951- | TyKind :: ImplicitSelf
1952- | TyKind :: Dummy
1953- | TyKind :: Never
1954- | TyKind :: CVarArgs => { }
1955- TyKind :: Slice ( ty) => vis. visit_ty ( ty) ,
1956- TyKind :: Ptr ( mt) => vis. visit_mt ( mt) ,
1957- TyKind :: Ref ( lt, mt) => {
1958- visit_opt ( lt, |lt| vis. visit_lifetime ( lt, LifetimeCtxt :: Ref ) ) ;
1959- vis. visit_mt ( mt) ;
1960- }
1961- TyKind :: BareFn ( bft) => {
1962- let BareFnTy { safety, ext : _, generic_params, decl, decl_span } = bft. deref_mut ( ) ;
1963- visit_safety ( vis, safety) ;
1964- generic_params. flat_map_in_place ( |param| vis. flat_map_generic_param ( param) ) ;
1965- vis. visit_fn_decl ( decl) ;
1966- vis. visit_span ( decl_span) ;
1967- }
1968- TyKind :: Tup ( tys) => visit_thin_vec ( tys, |ty| vis. visit_ty ( ty) ) ,
1969- TyKind :: Paren ( ty) => vis. visit_ty ( ty) ,
1970- TyKind :: Pat ( ty, pat) => {
1971- vis. visit_ty ( ty) ;
1972- vis. visit_pat ( pat) ;
1973- }
1974- TyKind :: Path ( qself, path) => {
1975- vis. visit_qself ( qself) ;
1976- vis. visit_path ( path, * id) ;
1977- }
1978- TyKind :: Array ( ty, length) => {
1979- vis. visit_ty ( ty) ;
1980- vis. visit_anon_const ( length) ;
1981- }
1982- TyKind :: Typeof ( expr) => vis. visit_anon_const ( expr) ,
1983- TyKind :: TraitObject ( bounds, _syntax) => {
1984- visit_vec ( bounds, |bound| vis. visit_param_bound ( bound, BoundKind :: TraitObject ) )
1985- }
1986- TyKind :: ImplTrait ( id, bounds) => {
1987- vis. visit_id ( id) ;
1988- visit_vec ( bounds, |bound| vis. visit_param_bound ( bound, BoundKind :: Impl ) ) ;
1989- }
1990- TyKind :: MacCall ( mac) => vis. visit_mac_call ( mac) ,
1991- TyKind :: AnonStruct ( id, fields) | TyKind :: AnonUnion ( id, fields) => {
1992- vis. visit_id ( id) ;
1993- fields. flat_map_in_place ( |field| vis. flat_map_field_def ( field) ) ;
1994- }
1995- }
1996- visit_lazy_tts ( vis, tokens) ;
1997- vis. visit_span ( span) ;
1998- }
1999-
20001978 fn walk_foreign_mod < T : MutVisitor > ( vis : & mut T , foreign_mod : & mut ForeignMod ) {
20011979 let ForeignMod { safety, abi : _, items } = foreign_mod;
20021980 visit_safety ( vis, safety) ;
0 commit comments