Skip to content

Commit a93bc79

Browse files
committed
Unify walk_assoc_item
1 parent 0af7f1d commit a93bc79

File tree

1 file changed

+75
-157
lines changed

1 file changed

+75
-157
lines changed

compiler/rustc_ast/src/visitors.rs

Lines changed: 75 additions & 157 deletions
Original file line numberDiff line numberDiff line change
@@ -1291,6 +1291,81 @@ macro_rules! make_ast_visitor {
12911291
return_result!(V)
12921292
}
12931293

1294+
pub fn walk_assoc_item<$($lt,)? V: $trait$(<$lt>)?>(
1295+
visitor: &mut V,
1296+
item: ref_t!(Item<AssocItemKind>),
1297+
ctxt: AssocCtxt
1298+
) -> result!(V) {
1299+
let Item { attrs, id, span, vis, ident, kind, tokens } = item;
1300+
try_v!(visit_id!(visitor, id));
1301+
visit_list!(visitor, visit_attribute, flat_map_attribute, attrs);
1302+
try_v!(visitor.visit_vis(vis));
1303+
try_v!(visit_ident!(visitor, ident));
1304+
match kind {
1305+
AssocItemKind::Const(box ConstItem { defaultness, generics, ty, expr }) => {
1306+
visit_defaultness!(visitor, defaultness);
1307+
try_v!(visitor.visit_generics(generics));
1308+
try_v!(visitor.visit_ty(ty));
1309+
visit_o!(expr, |expr| visitor.visit_expr(expr));
1310+
}
1311+
AssocItemKind::Fn(box Fn { defaultness, generics, sig, body }) => {
1312+
visit_defaultness!(visitor, defaultness);
1313+
let kind =
1314+
FnKind::Fn(FnCtxt::Assoc(ctxt), *ident, sig, vis, generics, as_deref!(body));
1315+
try_v!(visitor.visit_fn(kind, *span, *id));
1316+
}
1317+
AssocItemKind::Type(box TyAlias {
1318+
defaultness,
1319+
generics,
1320+
where_clauses,
1321+
bounds,
1322+
ty,
1323+
}) => {
1324+
visit_defaultness!(visitor, defaultness);
1325+
try_v!(visitor.visit_generics(generics));
1326+
visit_list!(visitor, visit_param_bound, bounds; BoundKind::Bound);
1327+
visit_o!(ty, |ty| visitor.visit_ty(ty));
1328+
walk_ty_alias_where_clauses!(visitor, where_clauses);
1329+
}
1330+
AssocItemKind::MacCall(mac) => {
1331+
try_v!(visitor.visit_mac_call(mac));
1332+
}
1333+
AssocItemKind::Delegation(box Delegation {
1334+
id,
1335+
qself,
1336+
path,
1337+
rename,
1338+
body,
1339+
from_glob: _,
1340+
}) => {
1341+
try_v!(visit_id!(visitor, id));
1342+
try_v!(visitor.visit_qself(qself));
1343+
try_v!(visitor.visit_path(path, *id));
1344+
visit_o!(rename, |rename: &$($mut)? Ident| visit_ident!(visitor, rename));
1345+
visit_o!(body, |body| visitor.visit_block(body));
1346+
}
1347+
AssocItemKind::DelegationMac(box DelegationMac {
1348+
qself,
1349+
prefix,
1350+
suffixes,
1351+
body,
1352+
}) => {
1353+
try_v!(visitor.visit_qself(qself));
1354+
try_v!(visitor.visit_path(prefix, *id));
1355+
if let Some(suffixes) = suffixes {
1356+
for (ident, rename) in suffixes {
1357+
try_v!(visit_ident!(visitor, ident));
1358+
visit_o!(rename, |rename: &$($mut)? Ident| visit_ident!(visitor, rename));
1359+
}
1360+
}
1361+
visit_o!(body, |body| visitor.visit_block(body));
1362+
}
1363+
}
1364+
visit_lazy_tts!(visitor, tokens);
1365+
try_v!(visit_span!(visitor, span));
1366+
return_result!(V)
1367+
}
1368+
12941369
derive_copy_clone!{
12951370
#[derive(Debug)]
12961371
pub enum FnKind<'a> {
@@ -1616,75 +1691,6 @@ pub mod visit {
16161691

16171692
make_ast_visitor!(Visitor<'ast>);
16181693

1619-
pub fn walk_assoc_item<'a, V: Visitor<'a>>(
1620-
visitor: &mut V,
1621-
item: &'a Item<AssocItemKind>,
1622-
ctxt: AssocCtxt,
1623-
) -> V::Result {
1624-
let &Item { id, span, ident, ref vis, ref attrs, ref kind, tokens: _ } = item;
1625-
walk_list!(visitor, visit_attribute, attrs);
1626-
try_visit!(visitor.visit_vis(vis));
1627-
try_visit!(visitor.visit_ident(ident));
1628-
match kind {
1629-
AssocItemKind::Const(box ConstItem { defaultness: _, generics, ty, expr }) => {
1630-
try_visit!(visitor.visit_generics(generics));
1631-
try_visit!(visitor.visit_ty(ty));
1632-
visit_opt!(visitor, visit_expr, expr);
1633-
}
1634-
AssocItemKind::Fn(box Fn { defaultness: _, generics, sig, body }) => {
1635-
let kind =
1636-
FnKind::Fn(FnCtxt::Assoc(ctxt), ident, sig, vis, generics, body.as_deref());
1637-
try_visit!(visitor.visit_fn(kind, span, id));
1638-
}
1639-
AssocItemKind::Type(box TyAlias {
1640-
generics,
1641-
bounds,
1642-
ty,
1643-
defaultness: _,
1644-
where_clauses: _,
1645-
}) => {
1646-
try_visit!(visitor.visit_generics(generics));
1647-
walk_list!(visitor, visit_param_bound, bounds, BoundKind::Bound);
1648-
visit_opt!(visitor, visit_ty, ty);
1649-
}
1650-
AssocItemKind::MacCall(mac) => {
1651-
try_visit!(visitor.visit_mac_call(mac));
1652-
}
1653-
AssocItemKind::Delegation(box Delegation {
1654-
id,
1655-
qself,
1656-
path,
1657-
rename,
1658-
body,
1659-
from_glob: _,
1660-
}) => {
1661-
try_visit!(visitor.visit_qself(qself));
1662-
try_visit!(visitor.visit_path(path, *id));
1663-
visit_opt!(visitor, visit_ident, *rename);
1664-
visit_opt!(visitor, visit_block, body);
1665-
}
1666-
AssocItemKind::DelegationMac(box DelegationMac {
1667-
qself,
1668-
prefix,
1669-
suffixes,
1670-
body,
1671-
}) => {
1672-
try_visit!(visitor.visit_qself(qself));
1673-
try_visit!(visitor.visit_path(prefix, id));
1674-
if let Some(suffixes) = suffixes {
1675-
for (ident, rename) in suffixes {
1676-
visitor.visit_ident(*ident);
1677-
if let Some(rename) = rename {
1678-
visitor.visit_ident(*rename);
1679-
}
1680-
}
1681-
}
1682-
visit_opt!(visitor, visit_block, body);
1683-
}
1684-
}
1685-
V::Result::output()
1686-
}
1687-
16881694
// FIXME: Remove this function. Use walk_variant_data
16891695
pub fn walk_struct_def<'a, V: Visitor<'a>>(
16901696
visitor: &mut V,
@@ -2007,11 +2013,6 @@ pub mod mut_visit {
20072013
exprs.flat_map_in_place(|expr| vis.filter_map_expr(expr))
20082014
}
20092015

2010-
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
2011-
fn visit_bounds<T: MutVisitor>(vis: &mut T, bounds: &mut GenericBounds, ctxt: BoundKind) {
2012-
visit_vec(bounds, |bound| vis.visit_param_bound(bound, ctxt));
2013-
}
2014-
20152016
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
20162017
fn visit_attr_args<T: MutVisitor>(vis: &mut T, args: &mut AttrArgs) {
20172018
match args {
@@ -2290,16 +2291,6 @@ pub mod mut_visit {
22902291
vis.visit_span(span_after);
22912292
}
22922293

2293-
fn visit_const_item<T: MutVisitor>(
2294-
ConstItem { defaultness, generics, ty, expr }: &mut ConstItem,
2295-
visitor: &mut T,
2296-
) {
2297-
visit_defaultness(visitor, defaultness);
2298-
visitor.visit_generics(generics);
2299-
visitor.visit_ty(ty);
2300-
visit_opt(expr, |expr| visitor.visit_expr(expr));
2301-
}
2302-
23032294
fn walk_fn_header<T: MutVisitor>(vis: &mut T, header: &mut FnHeader) {
23042295
let FnHeader { safety, coroutine_kind, constness, ext: _ } = header;
23052296
visit_constness(vis, constness);
@@ -2316,79 +2307,6 @@ pub mod mut_visit {
23162307
smallvec![item]
23172308
}
23182309

2319-
pub fn walk_assoc_item(visitor: &mut impl MutVisitor, item: &mut Item<AssocItemKind>, ctxt: AssocCtxt) {
2320-
let Item { attrs, id, span, vis, ident, kind, tokens } = item;
2321-
visitor.visit_id(id);
2322-
visit_attrs(visitor, attrs);
2323-
visitor.visit_vis(vis);
2324-
visitor.visit_ident(ident);
2325-
match kind {
2326-
AssocItemKind::Const(item) => {
2327-
visit_const_item(item, visitor);
2328-
}
2329-
AssocItemKind::Fn(box Fn { defaultness, generics, sig, body }) => {
2330-
visit_defaultness(visitor, defaultness);
2331-
let kind =
2332-
FnKind::Fn(FnCtxt::Assoc(ctxt), *ident, sig, vis, generics, body.as_deref_mut());
2333-
visitor.visit_fn(kind, *span, *id);
2334-
}
2335-
AssocItemKind::Type(box TyAlias {
2336-
defaultness,
2337-
generics,
2338-
where_clauses,
2339-
bounds,
2340-
ty,
2341-
}) => {
2342-
visit_defaultness(visitor, defaultness);
2343-
visitor.visit_generics(generics);
2344-
visit_bounds(visitor, bounds, BoundKind::Bound);
2345-
visit_opt(ty, |ty| visitor.visit_ty(ty));
2346-
walk_ty_alias_where_clauses(visitor, where_clauses);
2347-
}
2348-
AssocItemKind::MacCall(mac) => visitor.visit_mac_call(mac),
2349-
AssocItemKind::Delegation(box Delegation {
2350-
id,
2351-
qself,
2352-
path,
2353-
rename,
2354-
body,
2355-
from_glob: _,
2356-
}) => {
2357-
visitor.visit_id(id);
2358-
visitor.visit_qself(qself);
2359-
visitor.visit_path(path, *id);
2360-
if let Some(rename) = rename {
2361-
visitor.visit_ident(rename);
2362-
}
2363-
if let Some(body) = body {
2364-
visitor.visit_block(body);
2365-
}
2366-
}
2367-
AssocItemKind::DelegationMac(box DelegationMac {
2368-
qself,
2369-
prefix,
2370-
suffixes,
2371-
body,
2372-
}) => {
2373-
visitor.visit_qself(qself);
2374-
visitor.visit_path(prefix, *id);
2375-
if let Some(suffixes) = suffixes {
2376-
for (ident, rename) in suffixes {
2377-
visitor.visit_ident(ident);
2378-
if let Some(rename) = rename {
2379-
visitor.visit_ident(rename);
2380-
}
2381-
}
2382-
}
2383-
if let Some(body) = body {
2384-
visitor.visit_block(body);
2385-
}
2386-
}
2387-
}
2388-
visit_lazy_tts(visitor, tokens);
2389-
visitor.visit_span(span);
2390-
}
2391-
23922310
pub fn walk_flat_map_assoc_item(
23932311
visitor: &mut impl MutVisitor,
23942312
mut item: P<Item<AssocItemKind>>,

0 commit comments

Comments
 (0)