Skip to content

Commit c3d2dcf

Browse files
committed
Unify walk_assoc_item
1 parent 2e19482 commit c3d2dcf

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
@@ -1283,6 +1283,81 @@ macro_rules! make_ast_visitor {
12831283
return_result!(V)
12841284
}
12851285

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

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

2012-
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
2013-
fn visit_bounds<T: MutVisitor>(vis: &mut T, bounds: &mut GenericBounds, ctxt: BoundKind) {
2014-
visit_vec(bounds, |bound| vis.visit_param_bound(bound, ctxt));
2015-
}
2016-
20172018
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
20182019
fn visit_attr_args<T: MutVisitor>(vis: &mut T, args: &mut AttrArgs) {
20192020
match args {
@@ -2292,16 +2293,6 @@ pub mod mut_visit {
22922293
vis.visit_span(span_after);
22932294
}
22942295

2295-
fn visit_const_item<T: MutVisitor>(
2296-
ConstItem { defaultness, generics, ty, expr }: &mut ConstItem,
2297-
visitor: &mut T,
2298-
) {
2299-
visit_defaultness(visitor, defaultness);
2300-
visitor.visit_generics(generics);
2301-
visitor.visit_ty(ty);
2302-
visit_opt(expr, |expr| visitor.visit_expr(expr));
2303-
}
2304-
23052296
fn walk_fn_header<T: MutVisitor>(vis: &mut T, header: &mut FnHeader) {
23062297
let FnHeader { safety, coroutine_kind, constness, ext: _ } = header;
23072298
visit_constness(vis, constness);
@@ -2325,79 +2316,6 @@ pub mod mut_visit {
23252316
smallvec![item]
23262317
}
23272318

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

0 commit comments

Comments
 (0)