Skip to content

Commit 247ee8d

Browse files
committed
Unify walk_ty
1 parent 9ccb13c commit 247ee8d

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
@@ -362,7 +362,6 @@ macro_rules! make_ast_visitor {
362362
make_visit!{P!(Pat); visit_pat, walk_pat}
363363
make_visit!{P!(Ty); visit_ty, walk_ty}
364364

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

@@ -1298,52 +1364,6 @@ pub mod visit {
12981364
walk_assoc_item(visitor, item, AssocCtxt::Trait /*ignored*/)
12991365
}
13001366

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

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

0 commit comments

Comments
 (0)