Skip to content

Commit 91b77e0

Browse files
committed
use helper macro for flat_map vs visit_list, initial dedups
1 parent 425e142 commit 91b77e0

File tree

2 files changed

+139
-153
lines changed

2 files changed

+139
-153
lines changed

compiler/rustc_ast/src/mut_visit.rs

Lines changed: 26 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -211,10 +211,6 @@ pub trait MutVisitor: Sized {
211211
walk_ident(self, i);
212212
}
213213

214-
fn visit_modifiers(&mut self, m: &mut TraitBoundModifiers) {
215-
walk_modifiers(self, m);
216-
}
217-
218214
fn visit_path(&mut self, p: &mut Path) {
219215
walk_path(self, p);
220216
}
@@ -367,6 +363,28 @@ pub trait MutVisitor: Sized {
367363

368364
super::common_visitor_and_walkers!((mut) MutVisitor);
369365

366+
macro_rules! generate_flat_map_visitor_fns {
367+
($($name:ident, $Ty:ty, $flat_map_fn:ident;)+) => {
368+
$(
369+
fn $name<V: MutVisitor>(
370+
vis: &mut V,
371+
values: &mut ThinVec<$Ty>,
372+
) {
373+
values.flat_map_in_place(|value| vis.$flat_map_fn(value));
374+
}
375+
)+
376+
}
377+
}
378+
379+
generate_flat_map_visitor_fns! {
380+
visit_items, P<Item>, flat_map_item;
381+
visit_foreign_items, P<ForeignItem>, flat_map_foreign_item;
382+
visit_generic_params, GenericParam, flat_map_generic_param;
383+
visit_stmts, Stmt, flat_map_stmt;
384+
visit_exprs, P<Expr>, filter_map_expr;
385+
visit_pat_fields, PatField, flat_map_pat_field;
386+
}
387+
370388
#[inline]
371389
fn visit_vec<T, F>(elems: &mut Vec<T>, mut visit_elem: F)
372390
where
@@ -403,15 +421,6 @@ fn visit_attrs<T: MutVisitor>(vis: &mut T, attrs: &mut AttrVec) {
403421
}
404422
}
405423

406-
#[allow(unused)]
407-
fn visit_exprs<T: MutVisitor>(vis: &mut T, exprs: &mut Vec<P<Expr>>) {
408-
exprs.flat_map_in_place(|expr| vis.filter_map_expr(expr))
409-
}
410-
411-
fn visit_thin_exprs<T: MutVisitor>(vis: &mut T, exprs: &mut ThinVec<P<Expr>>) {
412-
exprs.flat_map_in_place(|expr| vis.filter_map_expr(expr))
413-
}
414-
415424
fn visit_attr_args<T: MutVisitor>(vis: &mut T, args: &mut AttrArgs) {
416425
match args {
417426
AttrArgs::Empty => {}
@@ -583,27 +592,6 @@ fn walk_parenthesized_parameter_data<T: MutVisitor>(vis: &mut T, args: &mut Pare
583592
vis.visit_span(inputs_span);
584593
}
585594

586-
fn walk_local<T: MutVisitor>(vis: &mut T, local: &mut Local) {
587-
let Local { id, super_, pat, ty, kind, span, colon_sp, attrs, tokens: _ } = local;
588-
visit_opt(super_, |sp| vis.visit_span(sp));
589-
vis.visit_id(id);
590-
visit_attrs(vis, attrs);
591-
vis.visit_pat(pat);
592-
visit_opt(ty, |ty| vis.visit_ty(ty));
593-
match kind {
594-
LocalKind::Decl => {}
595-
LocalKind::Init(init) => {
596-
vis.visit_expr(init);
597-
}
598-
LocalKind::InitElse(init, els) => {
599-
vis.visit_expr(init);
600-
vis.visit_block(els);
601-
}
602-
}
603-
visit_opt(colon_sp, |sp| vis.visit_span(sp));
604-
vis.visit_span(span);
605-
}
606-
607595
fn walk_attribute<T: MutVisitor>(vis: &mut T, attr: &mut Attribute) {
608596
let Attribute { kind, id: _, style: _, span } = attr;
609597
match kind {
@@ -858,30 +846,6 @@ fn walk_trait_ref<T: MutVisitor>(vis: &mut T, TraitRef { path, ref_id }: &mut Tr
858846
vis.visit_path(path);
859847
}
860848

861-
fn walk_poly_trait_ref<T: MutVisitor>(vis: &mut T, p: &mut PolyTraitRef) {
862-
let PolyTraitRef { bound_generic_params, modifiers, trait_ref, span } = p;
863-
vis.visit_modifiers(modifiers);
864-
bound_generic_params.flat_map_in_place(|param| vis.flat_map_generic_param(param));
865-
vis.visit_trait_ref(trait_ref);
866-
vis.visit_span(span);
867-
}
868-
869-
fn walk_modifiers<V: MutVisitor>(vis: &mut V, m: &mut TraitBoundModifiers) {
870-
let TraitBoundModifiers { constness, asyncness, polarity } = m;
871-
match constness {
872-
BoundConstness::Never => {}
873-
BoundConstness::Always(span) | BoundConstness::Maybe(span) => vis.visit_span(span),
874-
}
875-
match asyncness {
876-
BoundAsyncness::Normal => {}
877-
BoundAsyncness::Async(span) => vis.visit_span(span),
878-
}
879-
match polarity {
880-
BoundPolarity::Positive => {}
881-
BoundPolarity::Negative(span) | BoundPolarity::Maybe(span) => vis.visit_span(span),
882-
}
883-
}
884-
885849
pub fn walk_field_def<T: MutVisitor>(visitor: &mut T, fd: &mut FieldDef) {
886850
let FieldDef { span, ident, vis, id, ty, attrs, is_placeholder: _, safety, default } = fd;
887851
visitor.visit_id(id);
@@ -930,16 +894,6 @@ pub fn walk_item_kind<K: WalkItemKind>(
930894
kind.walk(span, id, visibility, ctxt, vis)
931895
}
932896

933-
pub fn walk_crate<T: MutVisitor>(vis: &mut T, krate: &mut Crate) {
934-
let Crate { attrs, items, spans, id, is_placeholder: _ } = krate;
935-
vis.visit_id(id);
936-
visit_attrs(vis, attrs);
937-
items.flat_map_in_place(|item| vis.flat_map_item(item));
938-
let ModSpans { inner_span, inject_use_span } = spans;
939-
vis.visit_span(inner_span);
940-
vis.visit_span(inject_use_span);
941-
}
942-
943897
pub fn walk_flat_map_item(vis: &mut impl MutVisitor, mut item: P<Item>) -> SmallVec<[P<Item>; 1]> {
944898
vis.visit_item(&mut item);
945899
smallvec![item]
@@ -1021,18 +975,18 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
1021975
vis.visit_id(id);
1022976
visit_attrs(vis, attrs);
1023977
match kind {
1024-
ExprKind::Array(exprs) => visit_thin_exprs(vis, exprs),
978+
ExprKind::Array(exprs) => visit_exprs(vis, exprs),
1025979
ExprKind::ConstBlock(anon_const) => {
1026980
vis.visit_anon_const(anon_const);
1027981
}
1028982
ExprKind::Repeat(expr, count) => {
1029983
vis.visit_expr(expr);
1030984
vis.visit_anon_const(count);
1031985
}
1032-
ExprKind::Tup(exprs) => visit_thin_exprs(vis, exprs),
986+
ExprKind::Tup(exprs) => visit_exprs(vis, exprs),
1033987
ExprKind::Call(f, args) => {
1034988
vis.visit_expr(f);
1035-
visit_thin_exprs(vis, args);
989+
visit_exprs(vis, args);
1036990
}
1037991
ExprKind::MethodCall(box MethodCall {
1038992
seg: PathSegment { ident, id, args: seg_args },
@@ -1044,7 +998,7 @@ pub fn walk_expr<T: MutVisitor>(vis: &mut T, Expr { kind, id, span, attrs, token
1044998
vis.visit_id(id);
1045999
vis.visit_ident(ident);
10461000
visit_opt(seg_args, |args| vis.visit_generic_args(args));
1047-
visit_thin_exprs(vis, call_args);
1001+
visit_exprs(vis, call_args);
10481002
vis.visit_span(span);
10491003
}
10501004
ExprKind::Binary(binop, lhs, rhs) => {

0 commit comments

Comments
 (0)