@@ -416,6 +416,16 @@ macro_rules! make_ast_visitor {
416
416
}
417
417
}
418
418
419
+ macro_rules! visit_safety {
420
+ ( $vis: expr, $safety: expr) => {
421
+ if_mut_expr!(
422
+ visit_safety( $vis, $safety)
423
+ ,
424
+ // assign to _ to prevent unused_variable warnings
425
+ { let _ = ( & $vis, & $safety) ; }
426
+ ) ;
427
+ }
428
+ }
419
429
420
430
// FIXME: should only exist while Visitor::visit_ident
421
431
// doesn't receives a reference
@@ -1067,6 +1077,77 @@ macro_rules! make_ast_visitor {
1067
1077
return_result!( V )
1068
1078
}
1069
1079
1080
+ pub fn walk_ty<$( $lt, ) ? V : $trait$( <$lt>) ?>(
1081
+ vis: & mut V ,
1082
+ ty: ref_t!( P !( Ty ) )
1083
+ ) -> result!( V ) {
1084
+ let Ty { id, kind, span, tokens } = deref_P!( ty) ;
1085
+ try_v!( visit_id!( vis, id) ) ;
1086
+ match kind {
1087
+ TyKind :: Err ( _guar) => { }
1088
+ TyKind :: Infer
1089
+ | TyKind :: ImplicitSelf
1090
+ | TyKind :: Dummy
1091
+ | TyKind :: Never
1092
+ | TyKind :: CVarArgs => { }
1093
+ TyKind :: Slice ( ty) => {
1094
+ try_v!( vis. visit_ty( ty) ) ;
1095
+ }
1096
+ TyKind :: Ptr ( mt) => {
1097
+ try_v!( vis. visit_mt( mt) ) ;
1098
+ }
1099
+ TyKind :: Ref ( lt, mt) => {
1100
+ visit_o!( lt, |lt| vis. visit_lifetime( lt, LifetimeCtxt :: Ref ) ) ;
1101
+ try_v!( vis. visit_mt( mt) ) ;
1102
+ }
1103
+ TyKind :: BareFn ( bft) => {
1104
+ let BareFnTy { safety, ext: _, generic_params, decl, decl_span } = & $( $mut) ? * * bft;
1105
+ visit_safety!( vis, safety) ;
1106
+ visit_list!( vis, visit_generic_param, flat_map_generic_param, generic_params) ;
1107
+ try_v!( vis. visit_fn_decl( decl) ) ;
1108
+ try_v!( visit_span!( vis, decl_span) ) ;
1109
+ }
1110
+ TyKind :: Tup ( tys) => {
1111
+ visit_list!( vis, visit_ty, tys) ;
1112
+ }
1113
+ TyKind :: Paren ( ty) => {
1114
+ try_v!( vis. visit_ty( ty) )
1115
+ }
1116
+ TyKind :: Pat ( ty, pat) => {
1117
+ try_v!( vis. visit_ty( ty) ) ;
1118
+ try_v!( vis. visit_pat( pat) ) ;
1119
+ }
1120
+ TyKind :: Path ( qself, path) => {
1121
+ try_v!( vis. visit_qself( qself) ) ;
1122
+ try_v!( vis. visit_path( path, * id) ) ;
1123
+ }
1124
+ TyKind :: Array ( ty, length) => {
1125
+ try_v!( vis. visit_ty( ty) ) ;
1126
+ try_v!( vis. visit_anon_const( length) ) ;
1127
+ }
1128
+ TyKind :: Typeof ( expr) => {
1129
+ try_v!( vis. visit_anon_const( expr) ) ;
1130
+ } ,
1131
+ TyKind :: TraitObject ( bounds, _syntax) => {
1132
+ visit_list!( vis, visit_param_bound, bounds; BoundKind :: TraitObject ) ;
1133
+ }
1134
+ TyKind :: ImplTrait ( id, bounds) => {
1135
+ try_v!( visit_id!( vis, id) ) ;
1136
+ visit_list!( vis, visit_param_bound, bounds; BoundKind :: Impl ) ;
1137
+ }
1138
+ TyKind :: MacCall ( mac) => {
1139
+ try_v!( vis. visit_mac_call( mac) )
1140
+ }
1141
+ TyKind :: AnonStruct ( id, fields) | TyKind :: AnonUnion ( id, fields) => {
1142
+ try_v!( visit_id!( vis, id) ) ;
1143
+ visit_list!( vis, visit_field_def, flat_map_field_def, fields) ;
1144
+ }
1145
+ }
1146
+ visit_lazy_tts!( vis, tokens) ;
1147
+ try_v!( visit_span!( vis, span) ) ;
1148
+ return_result!( V )
1149
+ }
1150
+
1070
1151
derive_copy_clone!{
1071
1152
#[ derive( Debug ) ]
1072
1153
pub enum FnKind <' a> {
@@ -1335,54 +1416,6 @@ pub mod visit {
1335
1416
V :: Result :: output ( )
1336
1417
}
1337
1418
1338
- pub fn walk_ty < ' a , V : Visitor < ' a > > ( visitor : & mut V , typ : & ' a Ty ) -> V :: Result {
1339
- let Ty { id, kind, span : _, tokens : _ } = typ;
1340
- match kind {
1341
- TyKind :: Slice ( ty) | TyKind :: Paren ( ty) => try_visit ! ( visitor. visit_ty( ty) ) ,
1342
- TyKind :: Ptr ( mt) => try_visit ! ( visitor. visit_mt( mt) ) ,
1343
- TyKind :: Ref ( opt_lifetime, mt) => {
1344
- visit_opt ! ( visitor, visit_lifetime, opt_lifetime, LifetimeCtxt :: Ref ) ;
1345
- try_visit ! ( visitor. visit_mt( mt) ) ;
1346
- }
1347
- TyKind :: Tup ( tuple_element_types) => {
1348
- walk_list ! ( visitor, visit_ty, tuple_element_types) ;
1349
- }
1350
- TyKind :: BareFn ( function_declaration) => {
1351
- let BareFnTy { safety : _, ext : _, generic_params, decl, decl_span : _ } =
1352
- & * * function_declaration;
1353
- walk_list ! ( visitor, visit_generic_param, generic_params) ;
1354
- try_visit ! ( visitor. visit_fn_decl( decl) ) ;
1355
- }
1356
- TyKind :: Path ( maybe_qself, path) => {
1357
- try_visit ! ( visitor. visit_qself( maybe_qself) ) ;
1358
- try_visit ! ( visitor. visit_path( path, * id) ) ;
1359
- }
1360
- TyKind :: Pat ( ty, pat) => {
1361
- try_visit ! ( visitor. visit_ty( ty) ) ;
1362
- try_visit ! ( visitor. visit_pat( pat) ) ;
1363
- }
1364
- TyKind :: Array ( ty, length) => {
1365
- try_visit ! ( visitor. visit_ty( ty) ) ;
1366
- try_visit ! ( visitor. visit_anon_const( length) ) ;
1367
- }
1368
- TyKind :: TraitObject ( bounds, _syntax) => {
1369
- walk_list ! ( visitor, visit_param_bound, bounds, BoundKind :: TraitObject ) ;
1370
- }
1371
- TyKind :: ImplTrait ( _id, bounds) => {
1372
- walk_list ! ( visitor, visit_param_bound, bounds, BoundKind :: Impl ) ;
1373
- }
1374
- TyKind :: Typeof ( expression) => try_visit ! ( visitor. visit_anon_const( expression) ) ,
1375
- TyKind :: Infer | TyKind :: ImplicitSelf | TyKind :: Dummy => { }
1376
- TyKind :: Err ( _guar) => { }
1377
- TyKind :: MacCall ( mac) => try_visit ! ( visitor. visit_mac_call( mac) ) ,
1378
- TyKind :: Never | TyKind :: CVarArgs => { }
1379
- TyKind :: AnonStruct ( _id, ref fields) | TyKind :: AnonUnion ( _id, ref fields) => {
1380
- walk_list ! ( visitor, visit_field_def, fields) ;
1381
- }
1382
- }
1383
- V :: Result :: output ( )
1384
- }
1385
-
1386
1419
pub fn walk_assoc_item_constraint < ' a , V : Visitor < ' a > > (
1387
1420
visitor : & mut V ,
1388
1421
constraint : & ' a AssocItemConstraint ,
@@ -1942,61 +1975,6 @@ pub mod mut_visit {
1942
1975
vis. visit_span ( span) ;
1943
1976
}
1944
1977
1945
- pub fn walk_ty < T : MutVisitor > ( vis : & mut T , ty : & mut P < Ty > ) {
1946
- let Ty { id, kind, span, tokens } = ty. deref_mut ( ) ;
1947
- vis. visit_id ( id) ;
1948
- match kind {
1949
- TyKind :: Err ( _guar) => { }
1950
- TyKind :: Infer
1951
- | TyKind :: ImplicitSelf
1952
- | TyKind :: Dummy
1953
- | TyKind :: Never
1954
- | TyKind :: CVarArgs => { }
1955
- TyKind :: Slice ( ty) => vis. visit_ty ( ty) ,
1956
- TyKind :: Ptr ( mt) => vis. visit_mt ( mt) ,
1957
- TyKind :: Ref ( lt, mt) => {
1958
- visit_opt ( lt, |lt| vis. visit_lifetime ( lt, LifetimeCtxt :: Ref ) ) ;
1959
- vis. visit_mt ( mt) ;
1960
- }
1961
- TyKind :: BareFn ( bft) => {
1962
- let BareFnTy { safety, ext : _, generic_params, decl, decl_span } = bft. deref_mut ( ) ;
1963
- visit_safety ( vis, safety) ;
1964
- generic_params. flat_map_in_place ( |param| vis. flat_map_generic_param ( param) ) ;
1965
- vis. visit_fn_decl ( decl) ;
1966
- vis. visit_span ( decl_span) ;
1967
- }
1968
- TyKind :: Tup ( tys) => visit_thin_vec ( tys, |ty| vis. visit_ty ( ty) ) ,
1969
- TyKind :: Paren ( ty) => vis. visit_ty ( ty) ,
1970
- TyKind :: Pat ( ty, pat) => {
1971
- vis. visit_ty ( ty) ;
1972
- vis. visit_pat ( pat) ;
1973
- }
1974
- TyKind :: Path ( qself, path) => {
1975
- vis. visit_qself ( qself) ;
1976
- vis. visit_path ( path, * id) ;
1977
- }
1978
- TyKind :: Array ( ty, length) => {
1979
- vis. visit_ty ( ty) ;
1980
- vis. visit_anon_const ( length) ;
1981
- }
1982
- TyKind :: Typeof ( expr) => vis. visit_anon_const ( expr) ,
1983
- TyKind :: TraitObject ( bounds, _syntax) => {
1984
- visit_vec ( bounds, |bound| vis. visit_param_bound ( bound, BoundKind :: TraitObject ) )
1985
- }
1986
- TyKind :: ImplTrait ( id, bounds) => {
1987
- vis. visit_id ( id) ;
1988
- visit_vec ( bounds, |bound| vis. visit_param_bound ( bound, BoundKind :: Impl ) ) ;
1989
- }
1990
- TyKind :: MacCall ( mac) => vis. visit_mac_call ( mac) ,
1991
- TyKind :: AnonStruct ( id, fields) | TyKind :: AnonUnion ( id, fields) => {
1992
- vis. visit_id ( id) ;
1993
- fields. flat_map_in_place ( |field| vis. flat_map_field_def ( field) ) ;
1994
- }
1995
- }
1996
- visit_lazy_tts ( vis, tokens) ;
1997
- vis. visit_span ( span) ;
1998
- }
1999
-
2000
1978
fn walk_foreign_mod < T : MutVisitor > ( vis : & mut T , foreign_mod : & mut ForeignMod ) {
2001
1979
let ForeignMod { safety, abi : _, items } = foreign_mod;
2002
1980
visit_safety ( vis, safety) ;
0 commit comments