@@ -343,6 +343,7 @@ macro_rules! make_ast_visitor {
343343 make_visit!{ PathSegment ; visit_path_segment, walk_path_segment}
344344 make_visit!{ PolyTraitRef ; visit_poly_trait_ref, walk_poly_trait_ref}
345345 make_visit!{ PreciseCapturingArg ; visit_precise_capturing_arg, walk_precise_capturing_arg}
346+ make_visit!{ Safety ; visit_safety, walk_safety}
346347 make_visit!{ TraitRef ; visit_trait_ref, walk_trait_ref}
347348 make_visit!{ UseTree , id: NodeId , _ nested: bool ; visit_use_tree, walk_use_tree}
348349 make_visit!{ Variant ; visit_variant, walk_variant}
@@ -851,6 +852,20 @@ macro_rules! make_ast_visitor {
851852 return_result!( V )
852853 }
853854
855+ pub fn walk_safety<$( $lt, ) ? V : $trait$( <$lt>) ?>(
856+ vis: & mut V ,
857+ safety: ref_t!( Safety )
858+ ) -> result!( V ) {
859+ match safety {
860+ Safety :: Unsafe ( span)
861+ | Safety :: Safe ( span) => {
862+ try_v!( visit_span!( vis, span) )
863+ }
864+ Safety :: Default => { }
865+ }
866+ return_result!( V )
867+ }
868+
854869 pub fn walk_trait_ref<$( $lt, ) ? V : $trait$( <$lt>) ?>(
855870 vis: & mut V ,
856871 trait_ref: ref_t!( TraitRef )
@@ -1177,13 +1192,17 @@ pub mod visit {
11771192 let kind = FnKind :: Fn ( FnCtxt :: Free , ident, sig, vis, generics, body. as_deref ( ) ) ;
11781193 try_visit ! ( visitor. visit_fn( kind, * span, * id) ) ;
11791194 }
1180- ItemKind :: Mod ( _unsafety, mod_kind) => match mod_kind {
1181- ModKind :: Loaded ( items, _inline, _inner_span) => {
1182- walk_list ! ( visitor, visit_item, items) ;
1195+ ItemKind :: Mod ( safety, mod_kind) => {
1196+ try_visit ! ( visitor. visit_safety( safety) ) ;
1197+ match mod_kind {
1198+ ModKind :: Loaded ( items, _inline, _inner_span) => {
1199+ walk_list ! ( visitor, visit_item, items) ;
1200+ }
1201+ ModKind :: Unloaded => { }
11831202 }
1184- ModKind :: Unloaded => { }
1185- } ,
1186- ItemKind :: ForeignMod ( ForeignMod { safety : _ , abi : _ , items } ) => {
1203+ }
1204+ ItemKind :: ForeignMod ( ForeignMod { safety , abi : _ , items } ) => {
1205+ try_visit ! ( visitor . visit_safety ( safety ) ) ;
11871206 walk_list ! ( visitor, visit_foreign_item, items) ;
11881207 }
11891208 ItemKind :: GlobalAsm ( asm) => try_visit ! ( visitor. visit_inline_asm( asm) ) ,
@@ -1204,14 +1223,15 @@ pub mod visit {
12041223 }
12051224 ItemKind :: Impl ( box Impl {
12061225 defaultness : _,
1207- safety : _ ,
1226+ safety,
12081227 generics,
12091228 constness : _,
12101229 polarity : _,
12111230 of_trait,
12121231 self_ty,
12131232 items,
12141233 } ) => {
1234+ try_visit ! ( visitor. visit_safety( safety) ) ;
12151235 try_visit ! ( visitor. visit_generics( generics) ) ;
12161236 visit_opt ! ( visitor, visit_trait_ref, of_trait) ;
12171237 try_visit ! ( visitor. visit_ty( self_ty) ) ;
@@ -1222,7 +1242,8 @@ pub mod visit {
12221242 try_visit ! ( visitor. visit_generics( generics) ) ;
12231243 try_visit ! ( visitor. visit_variant_data( struct_definition) ) ;
12241244 }
1225- ItemKind :: Trait ( box Trait { safety : _, is_auto : _, generics, bounds, items } ) => {
1245+ ItemKind :: Trait ( box Trait { safety, is_auto : _, generics, bounds, items } ) => {
1246+ try_visit ! ( visitor. visit_safety( safety) ) ;
12261247 try_visit ! ( visitor. visit_generics( generics) ) ;
12271248 walk_list ! ( visitor, visit_param_bound, bounds, BoundKind :: SuperTraits ) ;
12281249 walk_list ! ( visitor, visit_assoc_item, items, AssocCtxt :: Trait ) ;
@@ -1284,8 +1305,9 @@ pub mod visit {
12841305 walk_list ! ( visitor, visit_ty, tuple_element_types) ;
12851306 }
12861307 TyKind :: BareFn ( function_declaration) => {
1287- let BareFnTy { safety : _ , ext : _, generic_params, decl, decl_span : _ } =
1308+ let BareFnTy { safety, ext : _, generic_params, decl, decl_span : _ } =
12881309 & * * function_declaration;
1310+ try_visit ! ( visitor. visit_safety( safety) ) ;
12891311 walk_list ! ( visitor, visit_generic_param, generic_params) ;
12901312 try_visit ! ( visitor. visit_fn_decl( decl) ) ;
12911313 }
@@ -1830,7 +1852,7 @@ pub mod mut_visit {
18301852 }
18311853 TyKind :: BareFn ( bft) => {
18321854 let BareFnTy { safety, ext : _, generic_params, decl, decl_span } = bft. deref_mut ( ) ;
1833- visit_safety ( vis , safety) ;
1855+ vis . visit_safety ( safety) ;
18341856 generic_params. flat_map_in_place ( |param| vis. flat_map_generic_param ( param) ) ;
18351857 vis. visit_fn_decl ( decl) ;
18361858 vis. visit_span ( decl_span) ;
@@ -1865,7 +1887,7 @@ pub mod mut_visit {
18651887
18661888 fn walk_foreign_mod < T : MutVisitor > ( vis : & mut T , foreign_mod : & mut ForeignMod ) {
18671889 let ForeignMod { safety, abi : _, items } = foreign_mod;
1868- visit_safety ( vis , safety) ;
1890+ vis . visit_safety ( safety) ;
18691891 items. flat_map_in_place ( |item| vis. flat_map_foreign_item ( item) ) ;
18701892 }
18711893
@@ -2085,15 +2107,6 @@ pub mod mut_visit {
20852107 }
20862108 }
20872109
2088- // No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
2089- fn visit_safety < T : MutVisitor > ( vis : & mut T , safety : & mut Safety ) {
2090- match safety {
2091- Safety :: Unsafe ( span) => vis. visit_span ( span) ,
2092- Safety :: Safe ( span) => vis. visit_span ( span) ,
2093- Safety :: Default => { }
2094- }
2095- }
2096-
20972110 // No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
20982111 fn visit_polarity < T : MutVisitor > ( vis : & mut T , polarity : & mut ImplPolarity ) {
20992112 match polarity {
@@ -2200,7 +2213,7 @@ pub mod mut_visit {
22002213 vis. visit_fn ( FnKind :: Fn ( sig, generics, body) , span, id) ;
22012214 }
22022215 ItemKind :: Mod ( safety, mod_kind) => {
2203- visit_safety ( vis , safety) ;
2216+ vis . visit_safety ( safety) ;
22042217 match mod_kind {
22052218 ModKind :: Loaded (
22062219 items,
@@ -2249,7 +2262,7 @@ pub mod mut_visit {
22492262 items,
22502263 } ) => {
22512264 visit_defaultness ( vis, defaultness) ;
2252- visit_safety ( vis , safety) ;
2265+ vis . visit_safety ( safety) ;
22532266 vis. visit_generics ( generics) ;
22542267 visit_constness ( vis, constness) ;
22552268 visit_polarity ( vis, polarity) ;
@@ -2258,7 +2271,7 @@ pub mod mut_visit {
22582271 items. flat_map_in_place ( |item| vis. flat_map_assoc_item ( item, AssocCtxt :: Impl ) ) ;
22592272 }
22602273 ItemKind :: Trait ( box Trait { safety, is_auto : _, generics, bounds, items } ) => {
2261- visit_safety ( vis , safety) ;
2274+ vis . visit_safety ( safety) ;
22622275 vis. visit_generics ( generics) ;
22632276 visit_bounds ( vis, bounds, BoundKind :: Bound ) ;
22642277 items. flat_map_in_place ( |item| vis. flat_map_assoc_item ( item, AssocCtxt :: Trait ) ) ;
@@ -2386,7 +2399,7 @@ pub mod mut_visit {
23862399 let FnHeader { safety, coroutine_kind, constness, ext : _ } = header;
23872400 visit_constness ( vis, constness) ;
23882401 coroutine_kind. as_mut ( ) . map ( |coroutine_kind| vis. visit_coroutine_kind ( coroutine_kind) ) ;
2389- visit_safety ( vis , safety) ;
2402+ vis . visit_safety ( safety) ;
23902403 }
23912404
23922405 /// Mutates one item, returning the item again.
0 commit comments