Skip to content

Commit 9ccb13c

Browse files
committed
Add {visit,walk}_safety
1 parent a3565ff commit 9ccb13c

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
@@ -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

Comments
 (0)