@@ -229,6 +229,10 @@ macro_rules! make_ast_visitor {
229
229
( $t: ty) => { if_mut_ty!( P <$t>, $t) }
230
230
}
231
231
232
+ macro_rules! deref_P {
233
+ ( $p: expr) => { if_mut_expr!( $p. deref_mut( ) , $p) }
234
+ }
235
+
232
236
macro_rules! make_visit {
233
237
( $ty: ty, $visit: ident, $walk: ident) => {
234
238
fn $visit( & mut self , arg: ref_t!( $ty) ) -> result!( ) {
@@ -554,6 +558,16 @@ macro_rules! make_ast_visitor {
554
558
return_result!( V )
555
559
}
556
560
561
+ pub fn walk_fn_decl<$( $lt, ) ? V : $trait$( <$lt>) ?>(
562
+ vis: & mut V ,
563
+ decl: ref_t!( P !( FnDecl ) )
564
+ ) -> result!( V ) {
565
+ let FnDecl { inputs, output } = deref_P!( decl) ;
566
+ visit_list!( vis, visit_param, flat_map_param, inputs) ;
567
+ try_v!( vis. visit_fn_ret_ty( output) ) ;
568
+ return_result!( V )
569
+ }
570
+
557
571
make_walk_flat_map!{ Arm , walk_flat_map_arm, visit_arm}
558
572
make_walk_flat_map!{ ExprField , walk_flat_map_expr_field, visit_expr_field}
559
573
make_walk_flat_map!{ FieldDef , walk_flat_map_field_def, visit_field_def}
@@ -1171,14 +1185,6 @@ pub mod visit {
1171
1185
V :: Result :: output ( )
1172
1186
}
1173
1187
1174
- pub fn walk_fn_decl < ' a , V : Visitor < ' a > > (
1175
- visitor : & mut V ,
1176
- FnDecl { inputs, output } : & ' a FnDecl ,
1177
- ) -> V :: Result {
1178
- walk_list ! ( visitor, visit_param, inputs) ;
1179
- visitor. visit_fn_ret_ty ( output)
1180
- }
1181
-
1182
1188
pub fn walk_fn < ' a , V : Visitor < ' a > > ( visitor : & mut V , kind : FnKind < ' a > ) -> V :: Result {
1183
1189
match kind {
1184
1190
FnKind :: Fn ( _ctxt, _ident, FnSig { header, decl, span : _ } , _vis, generics, body) => {
@@ -2190,12 +2196,6 @@ pub mod mut_visit {
2190
2196
}
2191
2197
}
2192
2198
2193
- fn walk_fn_decl < T : MutVisitor > ( vis : & mut T , decl : & mut P < FnDecl > ) {
2194
- let FnDecl { inputs, output } = decl. deref_mut ( ) ;
2195
- inputs. flat_map_in_place ( |param| vis. flat_map_param ( param) ) ;
2196
- vis. visit_fn_ret_ty ( output) ;
2197
- }
2198
-
2199
2199
fn walk_param_bound < T : MutVisitor > ( vis : & mut T , pb : & mut GenericBound ) {
2200
2200
match pb {
2201
2201
GenericBound :: Trait ( ty, _modifier) => vis. visit_poly_trait_ref ( ty) ,
0 commit comments