@@ -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
@@ -1075,6 +1085,77 @@ macro_rules! make_ast_visitor {
1075
1085
return_result!( V )
1076
1086
}
1077
1087
1088
+ pub fn walk_ty<$( $lt, ) ? V : $trait$( <$lt>) ?>(
1089
+ vis: & mut V ,
1090
+ ty: ref_t!( P !( Ty ) )
1091
+ ) -> result!( V ) {
1092
+ let Ty { id, kind, span, tokens } = deref_P!( ty) ;
1093
+ try_v!( visit_id!( vis, id) ) ;
1094
+ match kind {
1095
+ TyKind :: Err ( _guar) => { }
1096
+ TyKind :: Infer
1097
+ | TyKind :: ImplicitSelf
1098
+ | TyKind :: Dummy
1099
+ | TyKind :: Never
1100
+ | TyKind :: CVarArgs => { }
1101
+ TyKind :: Slice ( ty) => {
1102
+ try_v!( vis. visit_ty( ty) ) ;
1103
+ }
1104
+ TyKind :: Ptr ( mt) => {
1105
+ try_v!( vis. visit_mt( mt) ) ;
1106
+ }
1107
+ TyKind :: Ref ( lt, mt) => {
1108
+ visit_o!( lt, |lt| vis. visit_lifetime( lt, LifetimeCtxt :: Ref ) ) ;
1109
+ try_v!( vis. visit_mt( mt) ) ;
1110
+ }
1111
+ TyKind :: BareFn ( bft) => {
1112
+ let BareFnTy { safety, ext: _, generic_params, decl, decl_span } = & $( $mut) ? * * bft;
1113
+ visit_safety!( vis, safety) ;
1114
+ visit_list!( vis, visit_generic_param, flat_map_generic_param, generic_params) ;
1115
+ try_v!( vis. visit_fn_decl( decl) ) ;
1116
+ try_v!( visit_span!( vis, decl_span) ) ;
1117
+ }
1118
+ TyKind :: Tup ( tys) => {
1119
+ visit_list!( vis, visit_ty, tys) ;
1120
+ }
1121
+ TyKind :: Paren ( ty) => {
1122
+ try_v!( vis. visit_ty( ty) )
1123
+ }
1124
+ TyKind :: Pat ( ty, pat) => {
1125
+ try_v!( vis. visit_ty( ty) ) ;
1126
+ try_v!( vis. visit_pat( pat) ) ;
1127
+ }
1128
+ TyKind :: Path ( qself, path) => {
1129
+ try_v!( vis. visit_qself( qself) ) ;
1130
+ try_v!( vis. visit_path( path, * id) ) ;
1131
+ }
1132
+ TyKind :: Array ( ty, length) => {
1133
+ try_v!( vis. visit_ty( ty) ) ;
1134
+ try_v!( vis. visit_anon_const( length) ) ;
1135
+ }
1136
+ TyKind :: Typeof ( expr) => {
1137
+ try_v!( vis. visit_anon_const( expr) ) ;
1138
+ } ,
1139
+ TyKind :: TraitObject ( bounds, _syntax) => {
1140
+ visit_list!( vis, visit_param_bound, bounds; BoundKind :: TraitObject ) ;
1141
+ }
1142
+ TyKind :: ImplTrait ( id, bounds) => {
1143
+ try_v!( visit_id!( vis, id) ) ;
1144
+ visit_list!( vis, visit_param_bound, bounds; BoundKind :: Impl ) ;
1145
+ }
1146
+ TyKind :: MacCall ( mac) => {
1147
+ try_v!( vis. visit_mac_call( mac) )
1148
+ }
1149
+ TyKind :: AnonStruct ( id, fields) | TyKind :: AnonUnion ( id, fields) => {
1150
+ try_v!( visit_id!( vis, id) ) ;
1151
+ visit_list!( vis, visit_field_def, flat_map_field_def, fields) ;
1152
+ }
1153
+ }
1154
+ visit_lazy_tts!( vis, tokens) ;
1155
+ try_v!( visit_span!( vis, span) ) ;
1156
+ return_result!( V )
1157
+ }
1158
+
1078
1159
derive_copy_clone!{
1079
1160
#[ derive( Debug ) ]
1080
1161
pub enum FnKind <' a> {
@@ -1327,54 +1408,6 @@ pub mod visit {
1327
1408
}
1328
1409
}
1329
1410
1330
- pub fn walk_ty < ' a , V : Visitor < ' a > > ( visitor : & mut V , typ : & ' a Ty ) -> V :: Result {
1331
- let Ty { id, kind, span : _, tokens : _ } = typ;
1332
- match kind {
1333
- TyKind :: Slice ( ty) | TyKind :: Paren ( ty) => try_visit ! ( visitor. visit_ty( ty) ) ,
1334
- TyKind :: Ptr ( mt) => try_visit ! ( visitor. visit_mt( mt) ) ,
1335
- TyKind :: Ref ( opt_lifetime, mt) => {
1336
- visit_opt ! ( visitor, visit_lifetime, opt_lifetime, LifetimeCtxt :: Ref ) ;
1337
- try_visit ! ( visitor. visit_mt( mt) ) ;
1338
- }
1339
- TyKind :: Tup ( tuple_element_types) => {
1340
- walk_list ! ( visitor, visit_ty, tuple_element_types) ;
1341
- }
1342
- TyKind :: BareFn ( function_declaration) => {
1343
- let BareFnTy { safety : _, ext : _, generic_params, decl, decl_span : _ } =
1344
- & * * function_declaration;
1345
- walk_list ! ( visitor, visit_generic_param, generic_params) ;
1346
- try_visit ! ( visitor. visit_fn_decl( decl) ) ;
1347
- }
1348
- TyKind :: Path ( maybe_qself, path) => {
1349
- try_visit ! ( visitor. visit_qself( maybe_qself) ) ;
1350
- try_visit ! ( visitor. visit_path( path, * id) ) ;
1351
- }
1352
- TyKind :: Pat ( ty, pat) => {
1353
- try_visit ! ( visitor. visit_ty( ty) ) ;
1354
- try_visit ! ( visitor. visit_pat( pat) ) ;
1355
- }
1356
- TyKind :: Array ( ty, length) => {
1357
- try_visit ! ( visitor. visit_ty( ty) ) ;
1358
- try_visit ! ( visitor. visit_anon_const( length) ) ;
1359
- }
1360
- TyKind :: TraitObject ( bounds, _syntax) => {
1361
- walk_list ! ( visitor, visit_param_bound, bounds, BoundKind :: TraitObject ) ;
1362
- }
1363
- TyKind :: ImplTrait ( _id, bounds) => {
1364
- walk_list ! ( visitor, visit_param_bound, bounds, BoundKind :: Impl ) ;
1365
- }
1366
- TyKind :: Typeof ( expression) => try_visit ! ( visitor. visit_anon_const( expression) ) ,
1367
- TyKind :: Infer | TyKind :: ImplicitSelf | TyKind :: Dummy => { }
1368
- TyKind :: Err ( _guar) => { }
1369
- TyKind :: MacCall ( mac) => try_visit ! ( visitor. visit_mac_call( mac) ) ,
1370
- TyKind :: Never | TyKind :: CVarArgs => { }
1371
- TyKind :: AnonStruct ( _id, ref fields) | TyKind :: AnonUnion ( _id, ref fields) => {
1372
- walk_list ! ( visitor, visit_field_def, fields) ;
1373
- }
1374
- }
1375
- V :: Result :: output ( )
1376
- }
1377
-
1378
1411
pub fn walk_assoc_item_constraint < ' a , V : Visitor < ' a > > (
1379
1412
visitor : & mut V ,
1380
1413
constraint : & ' a AssocItemConstraint ,
@@ -1927,61 +1960,6 @@ pub mod mut_visit {
1927
1960
vis. visit_span ( span) ;
1928
1961
}
1929
1962
1930
- pub fn walk_ty < T : MutVisitor > ( vis : & mut T , ty : & mut P < Ty > ) {
1931
- let Ty { id, kind, span, tokens } = ty. deref_mut ( ) ;
1932
- vis. visit_id ( id) ;
1933
- match kind {
1934
- TyKind :: Err ( _guar) => { }
1935
- TyKind :: Infer
1936
- | TyKind :: ImplicitSelf
1937
- | TyKind :: Dummy
1938
- | TyKind :: Never
1939
- | TyKind :: CVarArgs => { }
1940
- TyKind :: Slice ( ty) => vis. visit_ty ( ty) ,
1941
- TyKind :: Ptr ( mt) => vis. visit_mt ( mt) ,
1942
- TyKind :: Ref ( lt, mt) => {
1943
- visit_opt ( lt, |lt| vis. visit_lifetime ( lt, LifetimeCtxt :: Ref ) ) ;
1944
- vis. visit_mt ( mt) ;
1945
- }
1946
- TyKind :: BareFn ( bft) => {
1947
- let BareFnTy { safety, ext : _, generic_params, decl, decl_span } = bft. deref_mut ( ) ;
1948
- visit_safety ( vis, safety) ;
1949
- generic_params. flat_map_in_place ( |param| vis. flat_map_generic_param ( param) ) ;
1950
- vis. visit_fn_decl ( decl) ;
1951
- vis. visit_span ( decl_span) ;
1952
- }
1953
- TyKind :: Tup ( tys) => visit_thin_vec ( tys, |ty| vis. visit_ty ( ty) ) ,
1954
- TyKind :: Paren ( ty) => vis. visit_ty ( ty) ,
1955
- TyKind :: Pat ( ty, pat) => {
1956
- vis. visit_ty ( ty) ;
1957
- vis. visit_pat ( pat) ;
1958
- }
1959
- TyKind :: Path ( qself, path) => {
1960
- vis. visit_qself ( qself) ;
1961
- vis. visit_path ( path, * id) ;
1962
- }
1963
- TyKind :: Array ( ty, length) => {
1964
- vis. visit_ty ( ty) ;
1965
- vis. visit_anon_const ( length) ;
1966
- }
1967
- TyKind :: Typeof ( expr) => vis. visit_anon_const ( expr) ,
1968
- TyKind :: TraitObject ( bounds, _syntax) => {
1969
- visit_vec ( bounds, |bound| vis. visit_param_bound ( bound, BoundKind :: TraitObject ) )
1970
- }
1971
- TyKind :: ImplTrait ( id, bounds) => {
1972
- vis. visit_id ( id) ;
1973
- visit_vec ( bounds, |bound| vis. visit_param_bound ( bound, BoundKind :: Impl ) ) ;
1974
- }
1975
- TyKind :: MacCall ( mac) => vis. visit_mac_call ( mac) ,
1976
- TyKind :: AnonStruct ( id, fields) | TyKind :: AnonUnion ( id, fields) => {
1977
- vis. visit_id ( id) ;
1978
- fields. flat_map_in_place ( |field| vis. flat_map_field_def ( field) ) ;
1979
- }
1980
- }
1981
- visit_lazy_tts ( vis, tokens) ;
1982
- vis. visit_span ( span) ;
1983
- }
1984
-
1985
1963
fn walk_foreign_mod < T : MutVisitor > ( vis : & mut T , foreign_mod : & mut ForeignMod ) {
1986
1964
let ForeignMod { safety, abi : _, items } = foreign_mod;
1987
1965
visit_safety ( vis, safety) ;
0 commit comments