Skip to content

Commit 9a0a58c

Browse files
committed
Unify walk_variant_data
1 parent a8c9d0d commit 9a0a58c

File tree

1 file changed

+22
-24
lines changed

1 file changed

+22
-24
lines changed

compiler/rustc_ast/src/visitors.rs

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ macro_rules! make_ast_visitor {
296296
make_visit!{WhereClause, visit_where_clause, walk_where_clause}
297297
make_visit!{EnumDef, visit_enum_def, walk_enum_def}
298298
make_visit!{CaptureBy, visit_capture_by, walk_capture_by}
299+
make_visit!{VariantData, visit_variant_data, walk_variant_data}
299300
make_visit!{P!(Local), visit_local, walk_local}
300301
make_visit!{P!(Pat), visit_pat, walk_pat}
301302
make_visit!{P!(Expr), visit_expr, walk_expr}
@@ -323,15 +324,6 @@ macro_rules! make_ast_visitor {
323324
walk_precise_capturing_arg(self, arg);
324325
}
325326

326-
fn visit_variant_data(&mut self, vdata: ref_t!(VariantData)) -> result!() {
327-
// FIXME: inconsistent naming
328-
if_mut_expr!(
329-
walk_variant_data(self, vdata)
330-
,
331-
walk_struct_def(self, vdata)
332-
)
333-
}
334-
335327
fn visit_variant_discr(&mut self, discr: ref_t!(AnonConst)) -> result!() {
336328
self.visit_anon_const(discr)
337329
}
@@ -667,6 +659,25 @@ macro_rules! make_ast_visitor {
667659
return_result!(V)
668660
}
669661

662+
pub fn walk_variant_data<$($lt,)? V: $trait$(<$lt>)?>(
663+
vis: &mut V,
664+
vdata: ref_t!(VariantData)
665+
) -> result!(V) {
666+
match vdata {
667+
VariantData::Struct { fields, recovered: _ } => {
668+
visit_list!(vis, visit_field_def, flat_map_field_def, fields);
669+
}
670+
VariantData::Tuple(fields, id) => {
671+
try_v!(visit_id!(vis, id));
672+
visit_list!(vis, visit_field_def, flat_map_field_def, fields);
673+
}
674+
VariantData::Unit(id) => {
675+
try_v!(visit_id!(vis, id));
676+
}
677+
}
678+
return_result!(V)
679+
}
680+
670681
make_walk_flat_map!{Arm, walk_flat_map_arm, visit_arm}
671682
make_walk_flat_map!{Attribute, walk_flat_map_attribute, visit_attribute}
672683
make_walk_flat_map!{ExprField, walk_flat_map_expr_field, visit_expr_field}
@@ -1348,12 +1359,12 @@ pub mod visit {
13481359
V::Result::output()
13491360
}
13501361

1362+
// FIXME: Remove this function. Use walk_variant_data
13511363
pub fn walk_struct_def<'a, V: Visitor<'a>>(
13521364
visitor: &mut V,
13531365
struct_definition: &'a VariantData,
13541366
) -> V::Result {
1355-
walk_list!(visitor, visit_field_def, struct_definition.fields());
1356-
V::Result::output()
1367+
walk_variant_data(visitor, struct_definition)
13571368
}
13581369

13591370
pub fn walk_field_def<'a, V: Visitor<'a>>(visitor: &mut V, field: &'a FieldDef) -> V::Result {
@@ -2287,19 +2298,6 @@ pub mod mut_visit {
22872298
}
22882299
}
22892300

2290-
fn walk_variant_data<T: MutVisitor>(vis: &mut T, vdata: &mut VariantData) {
2291-
match vdata {
2292-
VariantData::Struct { fields, recovered: _ } => {
2293-
fields.flat_map_in_place(|field| vis.flat_map_field_def(field));
2294-
}
2295-
VariantData::Tuple(fields, id) => {
2296-
vis.visit_id(id);
2297-
fields.flat_map_in_place(|field| vis.flat_map_field_def(field));
2298-
}
2299-
VariantData::Unit(id) => vis.visit_id(id),
2300-
}
2301-
}
2302-
23032301
fn walk_trait_ref<T: MutVisitor>(vis: &mut T, TraitRef { path, ref_id }: &mut TraitRef) {
23042302
vis.visit_id(ref_id);
23052303
vis.visit_path(path);

0 commit comments

Comments
 (0)