Skip to content

Commit 28ac585

Browse files
committed
Unify walk_ty
1 parent bb9dff5 commit 28ac585

File tree

1 file changed

+67
-98
lines changed

1 file changed

+67
-98
lines changed

compiler/rustc_ast/src/visitors.rs

Lines changed: 67 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,6 @@ macro_rules! make_ast_visitor {
356356
make_visit!{P!(Pat); visit_pat, walk_pat}
357357
make_visit!{P!(Ty); visit_ty, walk_ty}
358358

359-
360359
fn visit_variant_discr(&mut self, discr: ref_t!(AnonConst)) -> result!() {
361360
self.visit_anon_const(discr)
362361
}
@@ -1042,6 +1041,73 @@ macro_rules! make_ast_visitor {
10421041
try_v!(visit_span!(vis, span));
10431042
return_result!(V)
10441043
}
1044+
1045+
pub fn walk_ty<$($lt,)? V: $trait$(<$lt>)?>(
1046+
vis: &mut V,
1047+
ty: ref_t!(Ty)
1048+
) -> result!(V) {
1049+
let Ty { id, kind, span, tokens } = ty;
1050+
try_v!(visit_id!(vis, id));
1051+
match kind {
1052+
TyKind::Err(_guar) => {}
1053+
TyKind::Infer
1054+
| TyKind::ImplicitSelf
1055+
| TyKind::Dummy
1056+
| TyKind::Never
1057+
| TyKind::CVarArgs => {}
1058+
TyKind::Slice(ty) => {
1059+
try_v!(vis.visit_ty(ty));
1060+
}
1061+
TyKind::Ptr(mt) => {
1062+
try_v!(vis.visit_mt(mt));
1063+
}
1064+
TyKind::Ref(lt, mt) => {
1065+
visit_o!(lt, |lt| vis.visit_lifetime(lt, LifetimeCtxt::Ref));
1066+
try_v!(vis.visit_mt(mt));
1067+
}
1068+
TyKind::BareFn(bft) => {
1069+
let BareFnTy { safety, ext: _, generic_params, decl, decl_span } = & $($mut)? **bft;
1070+
try_v!(vis.visit_safety(safety));
1071+
visit_list!(vis, visit_generic_param, flat_map_generic_param, generic_params);
1072+
try_v!(vis.visit_fn_decl(decl));
1073+
try_v!(visit_span!(vis, decl_span));
1074+
}
1075+
TyKind::Tup(tys) => {
1076+
visit_list!(vis, visit_ty, tys);
1077+
}
1078+
TyKind::Paren(ty) => {
1079+
try_v!(vis.visit_ty(ty))
1080+
}
1081+
TyKind::Pat(ty, pat) => {
1082+
try_v!(vis.visit_ty(ty));
1083+
try_v!(vis.visit_pat(pat));
1084+
}
1085+
TyKind::Path(qself, path) => {
1086+
try_v!(vis.visit_qself(qself));
1087+
try_v!(vis.visit_path(path, *id));
1088+
}
1089+
TyKind::Array(ty, length) => {
1090+
try_v!(vis.visit_ty(ty));
1091+
try_v!(vis.visit_anon_const(length));
1092+
}
1093+
TyKind::Typeof(expr) => {
1094+
try_v!(vis.visit_anon_const(expr));
1095+
},
1096+
TyKind::TraitObject(bounds, _syntax) => {
1097+
visit_list!(vis, visit_param_bound, bounds; BoundKind::TraitObject);
1098+
}
1099+
TyKind::ImplTrait(id, bounds) => {
1100+
try_v!(visit_id!(vis, id));
1101+
visit_list!(vis, visit_param_bound, bounds; BoundKind::Impl);
1102+
}
1103+
TyKind::MacCall(mac) => {
1104+
try_v!(vis.visit_mac_call(mac))
1105+
}
1106+
}
1107+
visit_lazy_tts!(vis, tokens);
1108+
try_v!(visit_span!(vis, span));
1109+
return_result!(V)
1110+
}
10451111
}
10461112
}
10471113

@@ -1292,52 +1358,6 @@ pub mod visit {
12921358
walk_assoc_item(visitor, item, AssocCtxt::Trait /*ignored*/)
12931359
}
12941360

1295-
pub fn walk_ty<'a, V: Visitor<'a>>(visitor: &mut V, typ: &'a Ty) -> V::Result {
1296-
let Ty { id, kind, span: _, tokens: _ } = typ;
1297-
match kind {
1298-
TyKind::Slice(ty) | TyKind::Paren(ty) => try_visit!(visitor.visit_ty(ty)),
1299-
TyKind::Ptr(mt) => try_visit!(visitor.visit_mt(mt)),
1300-
TyKind::Ref(opt_lifetime, mt) => {
1301-
visit_opt!(visitor, visit_lifetime, opt_lifetime, LifetimeCtxt::Ref);
1302-
try_visit!(visitor.visit_mt(mt));
1303-
}
1304-
TyKind::Tup(tuple_element_types) => {
1305-
walk_list!(visitor, visit_ty, tuple_element_types);
1306-
}
1307-
TyKind::BareFn(function_declaration) => {
1308-
let BareFnTy { safety, ext: _, generic_params, decl, decl_span: _ } =
1309-
&**function_declaration;
1310-
try_visit!(visitor.visit_safety(safety));
1311-
walk_list!(visitor, visit_generic_param, generic_params);
1312-
try_visit!(visitor.visit_fn_decl(decl));
1313-
}
1314-
TyKind::Path(maybe_qself, path) => {
1315-
try_visit!(visitor.visit_qself(maybe_qself));
1316-
try_visit!(visitor.visit_path(path, *id));
1317-
}
1318-
TyKind::Pat(ty, pat) => {
1319-
try_visit!(visitor.visit_ty(ty));
1320-
try_visit!(visitor.visit_pat(pat));
1321-
}
1322-
TyKind::Array(ty, length) => {
1323-
try_visit!(visitor.visit_ty(ty));
1324-
try_visit!(visitor.visit_anon_const(length));
1325-
}
1326-
TyKind::TraitObject(bounds, _syntax) => {
1327-
walk_list!(visitor, visit_param_bound, bounds, BoundKind::TraitObject);
1328-
}
1329-
TyKind::ImplTrait(_id, bounds) => {
1330-
walk_list!(visitor, visit_param_bound, bounds, BoundKind::Impl);
1331-
}
1332-
TyKind::Typeof(expression) => try_visit!(visitor.visit_anon_const(expression)),
1333-
TyKind::Infer | TyKind::ImplicitSelf | TyKind::Dummy => {}
1334-
TyKind::Err(_guar) => {}
1335-
TyKind::MacCall(mac) => try_visit!(visitor.visit_mac_call(mac)),
1336-
TyKind::Never | TyKind::CVarArgs => {}
1337-
}
1338-
V::Result::output()
1339-
}
1340-
13411361
pub fn walk_assoc_item_constraint<'a, V: Visitor<'a>>(
13421362
visitor: &mut V,
13431363
constraint: &'a AssocItemConstraint,
@@ -1834,57 +1854,6 @@ pub mod mut_visit {
18341854
vis.visit_span(span);
18351855
}
18361856

1837-
pub fn walk_ty<T: MutVisitor>(vis: &mut T, ty: &mut P<Ty>) {
1838-
let Ty { id, kind, span, tokens } = ty.deref_mut();
1839-
vis.visit_id(id);
1840-
match kind {
1841-
TyKind::Err(_guar) => {}
1842-
TyKind::Infer
1843-
| TyKind::ImplicitSelf
1844-
| TyKind::Dummy
1845-
| TyKind::Never
1846-
| TyKind::CVarArgs => {}
1847-
TyKind::Slice(ty) => vis.visit_ty(ty),
1848-
TyKind::Ptr(mt) => vis.visit_mt(mt),
1849-
TyKind::Ref(lt, mt) => {
1850-
visit_opt(lt, |lt| vis.visit_lifetime(lt, LifetimeCtxt::Ref));
1851-
vis.visit_mt(mt);
1852-
}
1853-
TyKind::BareFn(bft) => {
1854-
let BareFnTy { safety, ext: _, generic_params, decl, decl_span } = bft.deref_mut();
1855-
vis.visit_safety(safety);
1856-
generic_params.flat_map_in_place(|param| vis.flat_map_generic_param(param));
1857-
vis.visit_fn_decl(decl);
1858-
vis.visit_span(decl_span);
1859-
}
1860-
TyKind::Tup(tys) => visit_thin_vec(tys, |ty| vis.visit_ty(ty)),
1861-
TyKind::Paren(ty) => vis.visit_ty(ty),
1862-
TyKind::Pat(ty, pat) => {
1863-
vis.visit_ty(ty);
1864-
vis.visit_pat(pat);
1865-
}
1866-
TyKind::Path(qself, path) => {
1867-
vis.visit_qself(qself);
1868-
vis.visit_path(path, *id);
1869-
}
1870-
TyKind::Array(ty, length) => {
1871-
vis.visit_ty(ty);
1872-
vis.visit_anon_const(length);
1873-
}
1874-
TyKind::Typeof(expr) => vis.visit_anon_const(expr),
1875-
TyKind::TraitObject(bounds, _syntax) => {
1876-
visit_vec(bounds, |bound| vis.visit_param_bound(bound, BoundKind::TraitObject))
1877-
}
1878-
TyKind::ImplTrait(id, bounds) => {
1879-
vis.visit_id(id);
1880-
visit_vec(bounds, |bound| vis.visit_param_bound(bound, BoundKind::Impl));
1881-
}
1882-
TyKind::MacCall(mac) => vis.visit_mac_call(mac),
1883-
}
1884-
visit_lazy_tts(vis, tokens);
1885-
vis.visit_span(span);
1886-
}
1887-
18881857
fn walk_foreign_mod<T: MutVisitor>(vis: &mut T, foreign_mod: &mut ForeignMod) {
18891858
let ForeignMod { safety, abi: _, items } = foreign_mod;
18901859
vis.visit_safety(safety);

0 commit comments

Comments
 (0)