@@ -206,7 +206,7 @@ macro_rules! make_ast_visitor {
206
206
make_visit!{ MetaItemInner ; visit_meta_list_item, walk_meta_list_item}
207
207
208
208
fn flat_map_foreign_item( & mut self , ni: P <ForeignItem >) -> SmallVec <[ P <ForeignItem >; 1 ] > {
209
- walk_flat_map_item ( self , ni)
209
+ walk_flat_map_foreign_item ( self , ni)
210
210
}
211
211
212
212
fn flat_map_item( & mut self , i: P <Item >) -> SmallVec <[ P <Item >; 1 ] > {
@@ -281,8 +281,6 @@ macro_rules! make_ast_visitor {
281
281
type Result : VisitorResult = ( ) ;
282
282
283
283
make_visit!{ AssocItem , ctxt: AssocCtxt ; visit_assoc_item, walk_assoc_item}
284
- make_visit!{ ForeignItem ; visit_foreign_item, walk_item}
285
- make_visit!{ Item ; visit_item, walk_item}
286
284
make_visit!{ Stmt ; visit_stmt, walk_stmt}
287
285
288
286
/// This method is a hack to workaround unstable of `stmt_expr_attributes`.
@@ -354,6 +352,10 @@ macro_rules! make_ast_visitor {
354
352
make_visit!{ P !( Pat ) ; visit_pat, walk_pat}
355
353
make_visit!{ P !( Ty ) ; visit_ty, walk_ty}
356
354
355
+ // Default implementations are generic over WalkItemKind
356
+ make_visit!{ ForeignItem ; visit_foreign_item, walk_item}
357
+ make_visit!{ Item ; visit_item, walk_item}
358
+
357
359
fn visit_variant_discr( & mut self , discr: ref_t!( AnonConst ) ) -> result!( ) {
358
360
self . visit_anon_const( discr)
359
361
}
@@ -1208,6 +1210,21 @@ macro_rules! make_ast_visitor {
1208
1210
visitor: & mut V ,
1209
1211
) -> result!( V ) ;
1210
1212
}
1213
+
1214
+ pub fn walk_item<$( $lt, ) ? V : $trait$( <$lt>) ?>(
1215
+ visitor: & mut V ,
1216
+ item: ref_t!( Item <impl WalkItemKind >) ,
1217
+ ) -> result!( V ) {
1218
+ let Item { id, span, ident, vis, attrs, kind, tokens } = item;
1219
+ try_v!( visit_id!( visitor, id) ) ;
1220
+ visit_list!( visitor, visit_attribute, attrs) ;
1221
+ try_v!( visitor. visit_vis( vis) ) ;
1222
+ try_v!( visitor. visit_ident( ident) ) ;
1223
+ try_v!( kind. walk( * id, * span, vis, ident, visitor) ) ;
1224
+ visit_lazy_tts!( visitor, tokens) ;
1225
+ try_v!( visit_span!( visitor, span) ) ;
1226
+ return_result!( V )
1227
+ }
1211
1228
}
1212
1229
}
1213
1230
@@ -1443,18 +1460,6 @@ pub mod visit {
1443
1460
}
1444
1461
}
1445
1462
1446
- pub fn walk_item < ' a , V : Visitor < ' a > > (
1447
- visitor : & mut V ,
1448
- item : & ' a Item < impl WalkItemKind > ,
1449
- ) -> V :: Result {
1450
- let Item { id, span, ident, vis, attrs, kind, tokens : _ } = item;
1451
- walk_list ! ( visitor, visit_attribute, attrs) ;
1452
- try_visit ! ( visitor. visit_vis( vis) ) ;
1453
- try_visit ! ( visitor. visit_ident( ident) ) ;
1454
- try_visit ! ( kind. walk( * id, * span, vis, ident, visitor) ) ;
1455
- V :: Result :: output ( )
1456
- }
1457
-
1458
1463
impl WalkItemKind for ForeignItemKind {
1459
1464
fn walk < ' a , V : Visitor < ' a > > (
1460
1465
& ' a self ,
@@ -2288,18 +2293,19 @@ pub mod mut_visit {
2288
2293
}
2289
2294
2290
2295
/// Mutates one item, returning the item again.
2291
- pub fn walk_flat_map_item < K : WalkItemKind > (
2292
- visitor : & mut impl MutVisitor ,
2293
- mut item : P < Item < K > > ,
2294
- ) -> SmallVec < [ P < Item < K > > ; 1 ] > {
2295
- let Item { ident, attrs, id, kind, vis, span, tokens } = item. deref_mut ( ) ;
2296
- visitor. visit_id ( id) ;
2297
- visit_attrs ( visitor, attrs) ;
2298
- visitor. visit_vis ( vis) ;
2299
- visitor. visit_ident ( ident) ;
2300
- kind. walk ( * id, * span, vis, ident, visitor) ;
2301
- visit_lazy_tts ( visitor, tokens) ;
2302
- visitor. visit_span ( span) ;
2296
+ pub fn walk_flat_map_item (
2297
+ vis : & mut impl MutVisitor ,
2298
+ mut item : P < Item > ,
2299
+ ) -> SmallVec < [ P < Item > ; 1 ] > {
2300
+ vis. visit_item ( & mut item) ;
2301
+ smallvec ! [ item]
2302
+ }
2303
+
2304
+ pub fn walk_flat_map_foreign_item (
2305
+ vis : & mut impl MutVisitor ,
2306
+ mut item : P < ForeignItem > ,
2307
+ ) -> SmallVec < [ P < ForeignItem > ; 1 ] > {
2308
+ vis. visit_foreign_item ( & mut item) ;
2303
2309
smallvec ! [ item]
2304
2310
}
2305
2311
0 commit comments