@@ -349,6 +349,7 @@ macro_rules! make_ast_visitor {
349349 make_visit!{ PathSegment ; visit_path_segment, walk_path_segment}
350350 make_visit!{ PolyTraitRef ; visit_poly_trait_ref, walk_poly_trait_ref}
351351 make_visit!{ PreciseCapturingArg ; visit_precise_capturing_arg, walk_precise_capturing_arg}
352+ make_visit!{ Safety ; visit_safety, walk_safety}
352353 make_visit!{ TraitRef ; visit_trait_ref, walk_trait_ref}
353354 make_visit!{ UseTree , id: NodeId , _ nested: bool ; visit_use_tree, walk_use_tree}
354355 make_visit!{ Variant ; visit_variant, walk_variant}
@@ -857,6 +858,20 @@ macro_rules! make_ast_visitor {
857858 return_result!( V )
858859 }
859860
861+ pub fn walk_safety<$( $lt, ) ? V : $trait$( <$lt>) ?>(
862+ vis: & mut V ,
863+ safety: ref_t!( Safety )
864+ ) -> result!( V ) {
865+ match safety {
866+ Safety :: Unsafe ( span)
867+ | Safety :: Safe ( span) => {
868+ try_v!( visit_span!( vis, span) )
869+ }
870+ Safety :: Default => { }
871+ }
872+ return_result!( V )
873+ }
874+
860875 pub fn walk_trait_ref<$( $lt, ) ? V : $trait$( <$lt>) ?>(
861876 vis: & mut V ,
862877 trait_ref: ref_t!( TraitRef )
@@ -1183,13 +1198,17 @@ pub mod visit {
11831198 let kind = FnKind :: Fn ( FnCtxt :: Free , ident, sig, vis, generics, body. as_deref ( ) ) ;
11841199 try_visit ! ( visitor. visit_fn( kind, * span, * id) ) ;
11851200 }
1186- ItemKind :: Mod ( _unsafety, mod_kind) => match mod_kind {
1187- ModKind :: Loaded ( items, _inline, _inner_span) => {
1188- walk_list ! ( visitor, visit_item, items) ;
1201+ ItemKind :: Mod ( safety, mod_kind) => {
1202+ try_visit ! ( visitor. visit_safety( safety) ) ;
1203+ match mod_kind {
1204+ ModKind :: Loaded ( items, _inline, _inner_span) => {
1205+ walk_list ! ( visitor, visit_item, items) ;
1206+ }
1207+ ModKind :: Unloaded => { }
11891208 }
1190- ModKind :: Unloaded => { }
1191- } ,
1192- ItemKind :: ForeignMod ( ForeignMod { safety : _ , abi : _ , items } ) => {
1209+ }
1210+ ItemKind :: ForeignMod ( ForeignMod { safety , abi : _ , items } ) => {
1211+ try_visit ! ( visitor . visit_safety ( safety ) ) ;
11931212 walk_list ! ( visitor, visit_foreign_item, items) ;
11941213 }
11951214 ItemKind :: GlobalAsm ( asm) => try_visit ! ( visitor. visit_inline_asm( asm) ) ,
@@ -1210,14 +1229,15 @@ pub mod visit {
12101229 }
12111230 ItemKind :: Impl ( box Impl {
12121231 defaultness : _,
1213- safety : _ ,
1232+ safety,
12141233 generics,
12151234 constness : _,
12161235 polarity : _,
12171236 of_trait,
12181237 self_ty,
12191238 items,
12201239 } ) => {
1240+ try_visit ! ( visitor. visit_safety( safety) ) ;
12211241 try_visit ! ( visitor. visit_generics( generics) ) ;
12221242 visit_opt ! ( visitor, visit_trait_ref, of_trait) ;
12231243 try_visit ! ( visitor. visit_ty( self_ty) ) ;
@@ -1228,7 +1248,8 @@ pub mod visit {
12281248 try_visit ! ( visitor. visit_generics( generics) ) ;
12291249 try_visit ! ( visitor. visit_variant_data( struct_definition) ) ;
12301250 }
1231- ItemKind :: Trait ( box Trait { safety : _, is_auto : _, generics, bounds, items } ) => {
1251+ ItemKind :: Trait ( box Trait { safety, is_auto : _, generics, bounds, items } ) => {
1252+ try_visit ! ( visitor. visit_safety( safety) ) ;
12321253 try_visit ! ( visitor. visit_generics( generics) ) ;
12331254 walk_list ! ( visitor, visit_param_bound, bounds, BoundKind :: SuperTraits ) ;
12341255 walk_list ! ( visitor, visit_assoc_item, items, AssocCtxt :: Trait ) ;
@@ -1290,8 +1311,9 @@ pub mod visit {
12901311 walk_list ! ( visitor, visit_ty, tuple_element_types) ;
12911312 }
12921313 TyKind :: BareFn ( function_declaration) => {
1293- let BareFnTy { safety : _ , ext : _, generic_params, decl, decl_span : _ } =
1314+ let BareFnTy { safety, ext : _, generic_params, decl, decl_span : _ } =
12941315 & * * function_declaration;
1316+ try_visit ! ( visitor. visit_safety( safety) ) ;
12951317 walk_list ! ( visitor, visit_generic_param, generic_params) ;
12961318 try_visit ! ( visitor. visit_fn_decl( decl) ) ;
12971319 }
@@ -1836,7 +1858,7 @@ pub mod mut_visit {
18361858 }
18371859 TyKind :: BareFn ( bft) => {
18381860 let BareFnTy { safety, ext : _, generic_params, decl, decl_span } = bft. deref_mut ( ) ;
1839- visit_safety ( vis , safety) ;
1861+ vis . visit_safety ( safety) ;
18401862 generic_params. flat_map_in_place ( |param| vis. flat_map_generic_param ( param) ) ;
18411863 vis. visit_fn_decl ( decl) ;
18421864 vis. visit_span ( decl_span) ;
@@ -1871,7 +1893,7 @@ pub mod mut_visit {
18711893
18721894 fn walk_foreign_mod < T : MutVisitor > ( vis : & mut T , foreign_mod : & mut ForeignMod ) {
18731895 let ForeignMod { safety, abi : _, items } = foreign_mod;
1874- visit_safety ( vis , safety) ;
1896+ vis . visit_safety ( safety) ;
18751897 items. flat_map_in_place ( |item| vis. flat_map_foreign_item ( item) ) ;
18761898 }
18771899
@@ -2091,15 +2113,6 @@ pub mod mut_visit {
20912113 }
20922114 }
20932115
2094- // No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
2095- fn visit_safety < T : MutVisitor > ( vis : & mut T , safety : & mut Safety ) {
2096- match safety {
2097- Safety :: Unsafe ( span) => vis. visit_span ( span) ,
2098- Safety :: Safe ( span) => vis. visit_span ( span) ,
2099- Safety :: Default => { }
2100- }
2101- }
2102-
21032116 // No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
21042117 fn visit_polarity < T : MutVisitor > ( vis : & mut T , polarity : & mut ImplPolarity ) {
21052118 match polarity {
@@ -2206,7 +2219,7 @@ pub mod mut_visit {
22062219 vis. visit_fn ( FnKind :: Fn ( sig, generics, body) , span, id) ;
22072220 }
22082221 ItemKind :: Mod ( safety, mod_kind) => {
2209- visit_safety ( vis , safety) ;
2222+ vis . visit_safety ( safety) ;
22102223 match mod_kind {
22112224 ModKind :: Loaded (
22122225 items,
@@ -2255,7 +2268,7 @@ pub mod mut_visit {
22552268 items,
22562269 } ) => {
22572270 visit_defaultness ( vis, defaultness) ;
2258- visit_safety ( vis , safety) ;
2271+ vis . visit_safety ( safety) ;
22592272 vis. visit_generics ( generics) ;
22602273 visit_constness ( vis, constness) ;
22612274 visit_polarity ( vis, polarity) ;
@@ -2264,7 +2277,7 @@ pub mod mut_visit {
22642277 items. flat_map_in_place ( |item| vis. flat_map_assoc_item ( item, AssocCtxt :: Impl ) ) ;
22652278 }
22662279 ItemKind :: Trait ( box Trait { safety, is_auto : _, generics, bounds, items } ) => {
2267- visit_safety ( vis , safety) ;
2280+ vis . visit_safety ( safety) ;
22682281 vis. visit_generics ( generics) ;
22692282 visit_bounds ( vis, bounds, BoundKind :: Bound ) ;
22702283 items. flat_map_in_place ( |item| vis. flat_map_assoc_item ( item, AssocCtxt :: Trait ) ) ;
@@ -2392,7 +2405,7 @@ pub mod mut_visit {
23922405 let FnHeader { safety, coroutine_kind, constness, ext : _ } = header;
23932406 visit_constness ( vis, constness) ;
23942407 coroutine_kind. as_mut ( ) . map ( |coroutine_kind| vis. visit_coroutine_kind ( coroutine_kind) ) ;
2395- visit_safety ( vis , safety) ;
2408+ vis . visit_safety ( safety) ;
23962409 }
23972410
23982411 /// Mutates one item, returning the item again.
0 commit comments