@@ -296,6 +296,7 @@ macro_rules! make_ast_visitor {
296
296
make_visit!{ WhereClause , visit_where_clause, walk_where_clause}
297
297
make_visit!{ EnumDef , visit_enum_def, walk_enum_def}
298
298
make_visit!{ CaptureBy , visit_capture_by, walk_capture_by}
299
+ make_visit!{ VariantData , visit_variant_data, walk_variant_data}
299
300
make_visit!{ P !( Local ) , visit_local, walk_local}
300
301
make_visit!{ P !( Pat ) , visit_pat, walk_pat}
301
302
make_visit!{ P !( Expr ) , visit_expr, walk_expr}
@@ -323,15 +324,6 @@ macro_rules! make_ast_visitor {
323
324
walk_precise_capturing_arg( self , arg) ;
324
325
}
325
326
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
-
335
327
fn visit_variant_discr( & mut self , discr: ref_t!( AnonConst ) ) -> result!( ) {
336
328
self . visit_anon_const( discr)
337
329
}
@@ -667,6 +659,25 @@ macro_rules! make_ast_visitor {
667
659
return_result!( V )
668
660
}
669
661
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
+
670
681
make_walk_flat_map!{ Arm , walk_flat_map_arm, visit_arm}
671
682
make_walk_flat_map!{ Attribute , walk_flat_map_attribute, visit_attribute}
672
683
make_walk_flat_map!{ ExprField , walk_flat_map_expr_field, visit_expr_field}
@@ -1348,12 +1359,12 @@ pub mod visit {
1348
1359
V :: Result :: output ( )
1349
1360
}
1350
1361
1362
+ // FIXME: Remove this function. Use walk_variant_data
1351
1363
pub fn walk_struct_def < ' a , V : Visitor < ' a > > (
1352
1364
visitor : & mut V ,
1353
1365
struct_definition : & ' a VariantData ,
1354
1366
) -> V :: Result {
1355
- walk_list ! ( visitor, visit_field_def, struct_definition. fields( ) ) ;
1356
- V :: Result :: output ( )
1367
+ walk_variant_data ( visitor, struct_definition)
1357
1368
}
1358
1369
1359
1370
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 {
2287
2298
}
2288
2299
}
2289
2300
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
-
2303
2301
fn walk_trait_ref < T : MutVisitor > ( vis : & mut T , TraitRef { path, ref_id } : & mut TraitRef ) {
2304
2302
vis. visit_id ( ref_id) ;
2305
2303
vis. visit_path ( path) ;
0 commit comments