Skip to content

Commit bb9dff5

Browse files
committed
Add {visit,walk}_safety
1 parent 3370623 commit bb9dff5

File tree

1 file changed

+37
-24
lines changed

1 file changed

+37
-24
lines changed

compiler/rustc_ast/src/visitors.rs

Lines changed: 37 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)