Skip to content

Commit 40980e3

Browse files
committed
Unify {visit,walk}{,_foreign}_item
1 parent f2a4dca commit 40980e3

File tree

4 files changed

+36
-30
lines changed

4 files changed

+36
-30
lines changed

compiler/rustc_ast/src/visitors.rs

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ macro_rules! make_ast_visitor {
206206
make_visit!{MetaItemInner; visit_meta_list_item, walk_meta_list_item}
207207

208208
fn flat_map_foreign_item(&mut self, ni: P<ForeignItem>) -> SmallVec<[P<ForeignItem>; 1]> {
209-
walk_flat_map_item(self, ni)
209+
walk_flat_map_foreign_item(self, ni)
210210
}
211211

212212
fn flat_map_item(&mut self, i: P<Item>) -> SmallVec<[P<Item>; 1]> {
@@ -281,8 +281,6 @@ macro_rules! make_ast_visitor {
281281
type Result: VisitorResult = ();
282282

283283
make_visit!{AssocItem, ctxt: AssocCtxt; visit_assoc_item, walk_assoc_item}
284-
make_visit!{ForeignItem; visit_foreign_item, walk_item}
285-
make_visit!{Item; visit_item, walk_item}
286284
make_visit!{Stmt; visit_stmt, walk_stmt}
287285

288286
/// This method is a hack to workaround unstable of `stmt_expr_attributes`.
@@ -354,6 +352,10 @@ macro_rules! make_ast_visitor {
354352
make_visit!{P!(Pat); visit_pat, walk_pat}
355353
make_visit!{P!(Ty); visit_ty, walk_ty}
356354

355+
// Default implementations are generic over WalkItemKind
356+
make_visit!{ForeignItem; visit_foreign_item, walk_item}
357+
make_visit!{Item; visit_item, walk_item}
358+
357359
fn visit_variant_discr(&mut self, discr: ref_t!(AnonConst)) -> result!() {
358360
self.visit_anon_const(discr)
359361
}
@@ -1208,6 +1210,21 @@ macro_rules! make_ast_visitor {
12081210
visitor: &mut V,
12091211
) -> result!(V);
12101212
}
1213+
1214+
pub fn walk_item<$($lt,)? V: $trait$(<$lt>)?>(
1215+
visitor: &mut V,
1216+
item: ref_t!(Item<impl WalkItemKind>),
1217+
) -> result!(V) {
1218+
let Item { id, span, ident, vis, attrs, kind, tokens } = item;
1219+
try_v!(visit_id!(visitor, id));
1220+
visit_list!(visitor, visit_attribute, attrs);
1221+
try_v!(visitor.visit_vis(vis));
1222+
try_v!(visitor.visit_ident(ident));
1223+
try_v!(kind.walk(*id, *span, vis, ident, visitor));
1224+
visit_lazy_tts!(visitor, tokens);
1225+
try_v!(visit_span!(visitor, span));
1226+
return_result!(V)
1227+
}
12111228
}
12121229
}
12131230

@@ -1443,18 +1460,6 @@ pub mod visit {
14431460
}
14441461
}
14451462

1446-
pub fn walk_item<'a, V: Visitor<'a>>(
1447-
visitor: &mut V,
1448-
item: &'a Item<impl WalkItemKind>,
1449-
) -> V::Result {
1450-
let Item { id, span, ident, vis, attrs, kind, tokens: _ } = item;
1451-
walk_list!(visitor, visit_attribute, attrs);
1452-
try_visit!(visitor.visit_vis(vis));
1453-
try_visit!(visitor.visit_ident(ident));
1454-
try_visit!(kind.walk(*id, *span, vis, ident, visitor));
1455-
V::Result::output()
1456-
}
1457-
14581463
impl WalkItemKind for ForeignItemKind {
14591464
fn walk<'a, V: Visitor<'a>>(
14601465
&'a self,
@@ -2288,18 +2293,19 @@ pub mod mut_visit {
22882293
}
22892294

22902295
/// Mutates one item, returning the item again.
2291-
pub fn walk_flat_map_item<K: WalkItemKind>(
2292-
visitor: &mut impl MutVisitor,
2293-
mut item: P<Item<K>>,
2294-
) -> SmallVec<[P<Item<K>>; 1]> {
2295-
let Item { ident, attrs, id, kind, vis, span, tokens } = item.deref_mut();
2296-
visitor.visit_id(id);
2297-
visit_attrs(visitor, attrs);
2298-
visitor.visit_vis(vis);
2299-
visitor.visit_ident(ident);
2300-
kind.walk(*id, *span, vis, ident, visitor);
2301-
visit_lazy_tts(visitor, tokens);
2302-
visitor.visit_span(span);
2296+
pub fn walk_flat_map_item(
2297+
vis: &mut impl MutVisitor,
2298+
mut item: P<Item>,
2299+
) -> SmallVec<[P<Item>; 1]> {
2300+
vis.visit_item(&mut item);
2301+
smallvec![item]
2302+
}
2303+
2304+
pub fn walk_flat_map_foreign_item(
2305+
vis: &mut impl MutVisitor,
2306+
mut item: P<ForeignItem>,
2307+
) -> SmallVec<[P<ForeignItem>; 1]> {
2308+
vis.visit_foreign_item(&mut item);
23032309
smallvec![item]
23042310
}
23052311

compiler/rustc_builtin_macros/src/cfg_eval.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ impl MutVisitor for CfgEval<'_> {
258258
foreign_item: P<ast::ForeignItem>,
259259
) -> SmallVec<[P<ast::ForeignItem>; 1]> {
260260
let foreign_item = configure!(self, foreign_item);
261-
mut_visit::walk_flat_map_item(self, foreign_item)
261+
mut_visit::walk_flat_map_foreign_item(self, foreign_item)
262262
}
263263

264264
fn flat_map_arm(&mut self, arm: ast::Arm) -> SmallVec<[ast::Arm; 1]> {

compiler/rustc_expand/src/expand.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1381,7 +1381,7 @@ impl InvocationCollectorNode for P<ast::ForeignItem> {
13811381
fragment.make_foreign_items()
13821382
}
13831383
fn walk_flat_map<V: MutVisitor>(self, visitor: &mut V) -> Self::OutputTy {
1384-
walk_flat_map_item(visitor, self)
1384+
walk_flat_map_foreign_item(visitor, self)
13851385
}
13861386
fn is_mac_call(&self) -> bool {
13871387
matches!(self.kind, ForeignItemKind::MacCall(..))

compiler/rustc_expand/src/placeholders.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ impl MutVisitor for PlaceholderExpander {
296296
) -> SmallVec<[P<ast::ForeignItem>; 1]> {
297297
match item.kind {
298298
ast::ForeignItemKind::MacCall(_) => self.remove(item.id).make_foreign_items(),
299-
_ => walk_flat_map_item(self, item),
299+
_ => walk_flat_map_foreign_item(self, item),
300300
}
301301
}
302302

0 commit comments

Comments
 (0)