Skip to content

Commit cda78be

Browse files
committed
Unify walk_ty
1 parent 3ed541b commit cda78be

File tree

1 file changed

+81
-103
lines changed

1 file changed

+81
-103
lines changed

compiler/rustc_ast/src/visitors.rs

Lines changed: 81 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,16 @@ macro_rules! make_ast_visitor {
416416
}
417417
}
418418

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+
}
419429

420430
// FIXME: should only exist while Visitor::visit_ident
421431
// doesn't receives a reference
@@ -1067,6 +1077,77 @@ macro_rules! make_ast_visitor {
10671077
return_result!(V)
10681078
}
10691079

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+
10701151
derive_copy_clone!{
10711152
#[derive(Debug)]
10721153
pub enum FnKind<'a> {
@@ -1335,54 +1416,6 @@ pub mod visit {
13351416
V::Result::output()
13361417
}
13371418

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-
13861419
pub fn walk_assoc_item_constraint<'a, V: Visitor<'a>>(
13871420
visitor: &mut V,
13881421
constraint: &'a AssocItemConstraint,
@@ -1942,61 +1975,6 @@ pub mod mut_visit {
19421975
vis.visit_span(span);
19431976
}
19441977

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-
20001978
fn walk_foreign_mod<T: MutVisitor>(vis: &mut T, foreign_mod: &mut ForeignMod) {
20011979
let ForeignMod { safety, abi: _, items } = foreign_mod;
20021980
visit_safety(vis, safety);

0 commit comments

Comments
 (0)