Skip to content

Commit 5dff2b6

Browse files
committed
Unify walk_pat
1 parent 370dcb8 commit 5dff2b6

File tree

1 file changed

+53
-85
lines changed

1 file changed

+53
-85
lines changed

compiler/rustc_ast/src/visitors.rs

Lines changed: 53 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,59 @@ macro_rules! make_ast_visitor {
886886
}
887887
return_result!(V)
888888
}
889+
890+
pub fn walk_pat<$($lt,)? V: $trait$(<$lt>)?>(
891+
vis: &mut V,
892+
pattern: ref_t!(Pat)
893+
) -> result!(V) {
894+
let Pat { id, kind, span, tokens } = pattern;
895+
try_v!(visit_id!(vis, id));
896+
match kind {
897+
PatKind::Err(_guar) => {}
898+
PatKind::Wild | PatKind::Rest | PatKind::Never => {}
899+
PatKind::Ident(_binding_mode, ident, sub) => {
900+
try_v!(vis.visit_ident(ident));
901+
visit_o!(sub, |sub| vis.visit_pat(sub));
902+
}
903+
PatKind::Lit(e) => {
904+
try_v!(vis.visit_expr(e));
905+
}
906+
PatKind::TupleStruct(qself, path, elems) => {
907+
try_v!(vis.visit_qself(qself));
908+
try_v!(vis.visit_path(path, *id));
909+
visit_list!(vis, visit_pat, elems);
910+
}
911+
PatKind::Path(qself, path) => {
912+
try_v!(vis.visit_qself(qself));
913+
try_v!(vis.visit_path(path, *id));
914+
}
915+
PatKind::Struct(qself, path, fields, _etc) => {
916+
try_v!(vis.visit_qself(qself));
917+
try_v!(vis.visit_path(path, *id));
918+
visit_list!(vis, visit_pat_field, flat_map_pat_field, fields);
919+
}
920+
PatKind::Box(inner) | PatKind::Deref(inner) | PatKind::Paren(inner) => {
921+
try_v!(vis.visit_pat(inner));
922+
}
923+
PatKind::Ref(inner, _mutbl) => {
924+
try_v!(vis.visit_pat(inner));
925+
}
926+
PatKind::Range(e1, e2, Spanned { span, node: _ }) => {
927+
visit_o!(e1, |e| vis.visit_expr(e));
928+
visit_o!(e2, |e| vis.visit_expr(e));
929+
try_v!(visit_span!(vis, span));
930+
}
931+
PatKind::Tuple(elems) | PatKind::Slice(elems) | PatKind::Or(elems) => {
932+
visit_list!(vis, visit_pat, elems);
933+
}
934+
PatKind::MacCall(mac) => {
935+
try_v!(vis.visit_mac_call(mac));
936+
}
937+
}
938+
visit_lazy_tts!(vis, tokens);
939+
try_v!(visit_span!(vis, span));
940+
return_result!(V)
941+
}
889942
}
890943
}
891944

@@ -1201,48 +1254,6 @@ pub mod visit {
12011254
V::Result::output()
12021255
}
12031256

1204-
pub fn walk_pat<'a, V: Visitor<'a>>(visitor: &mut V, pattern: &'a Pat) -> V::Result {
1205-
let Pat { id, kind, span: _, tokens: _ } = pattern;
1206-
match kind {
1207-
PatKind::TupleStruct(opt_qself, path, elems) => {
1208-
try_visit!(visitor.visit_qself(opt_qself));
1209-
try_visit!(visitor.visit_path(path, *id));
1210-
walk_list!(visitor, visit_pat, elems);
1211-
}
1212-
PatKind::Path(opt_qself, path) => {
1213-
try_visit!(visitor.visit_qself(opt_qself));
1214-
try_visit!(visitor.visit_path(path, *id))
1215-
}
1216-
PatKind::Struct(opt_qself, path, fields, _rest) => {
1217-
try_visit!(visitor.visit_qself(opt_qself));
1218-
try_visit!(visitor.visit_path(path, *id));
1219-
walk_list!(visitor, visit_pat_field, fields);
1220-
}
1221-
PatKind::Box(subpattern) | PatKind::Deref(subpattern) | PatKind::Paren(subpattern) => {
1222-
try_visit!(visitor.visit_pat(subpattern));
1223-
}
1224-
PatKind::Ref(subpattern, _ /*mutbl*/) => {
1225-
try_visit!(visitor.visit_pat(subpattern));
1226-
}
1227-
PatKind::Ident(_bmode, ident, optional_subpattern) => {
1228-
try_visit!(visitor.visit_ident(ident));
1229-
visit_opt!(visitor, visit_pat, optional_subpattern);
1230-
}
1231-
PatKind::Lit(expression) => try_visit!(visitor.visit_expr(expression)),
1232-
PatKind::Range(lower_bound, upper_bound, _end) => {
1233-
visit_opt!(visitor, visit_expr, lower_bound);
1234-
visit_opt!(visitor, visit_expr, upper_bound);
1235-
}
1236-
PatKind::Wild | PatKind::Rest | PatKind::Never => {}
1237-
PatKind::Err(_guar) => {}
1238-
PatKind::Tuple(elems) | PatKind::Slice(elems) | PatKind::Or(elems) => {
1239-
walk_list!(visitor, visit_pat, elems);
1240-
}
1241-
PatKind::MacCall(mac) => try_visit!(visitor.visit_mac_call(mac)),
1242-
}
1243-
V::Result::output()
1244-
}
1245-
12461257
impl WalkItemKind for ForeignItemKind {
12471258
fn walk<'a, V: Visitor<'a>>(
12481259
&'a self,
@@ -2436,49 +2447,6 @@ pub mod mut_visit {
24362447
}
24372448
}
24382449

2439-
pub fn walk_pat<T: MutVisitor>(vis: &mut T, pat: &mut P<Pat>) {
2440-
let Pat { id, kind, span, tokens } = pat.deref_mut();
2441-
vis.visit_id(id);
2442-
match kind {
2443-
PatKind::Err(_guar) => {}
2444-
PatKind::Wild | PatKind::Rest | PatKind::Never => {}
2445-
PatKind::Ident(_binding_mode, ident, sub) => {
2446-
vis.visit_ident(ident);
2447-
visit_opt(sub, |sub| vis.visit_pat(sub));
2448-
}
2449-
PatKind::Lit(e) => vis.visit_expr(e),
2450-
PatKind::TupleStruct(qself, path, elems) => {
2451-
vis.visit_qself(qself);
2452-
vis.visit_path(path, *id);
2453-
visit_thin_vec(elems, |elem| vis.visit_pat(elem));
2454-
}
2455-
PatKind::Path(qself, path) => {
2456-
vis.visit_qself(qself);
2457-
vis.visit_path(path, *id);
2458-
}
2459-
PatKind::Struct(qself, path, fields, _etc) => {
2460-
vis.visit_qself(qself);
2461-
vis.visit_path(path, *id);
2462-
fields.flat_map_in_place(|field| vis.flat_map_pat_field(field));
2463-
}
2464-
PatKind::Box(inner) => vis.visit_pat(inner),
2465-
PatKind::Deref(inner) => vis.visit_pat(inner),
2466-
PatKind::Ref(inner, _mutbl) => vis.visit_pat(inner),
2467-
PatKind::Range(e1, e2, Spanned { span: _, node: _ }) => {
2468-
visit_opt(e1, |e| vis.visit_expr(e));
2469-
visit_opt(e2, |e| vis.visit_expr(e));
2470-
vis.visit_span(span);
2471-
}
2472-
PatKind::Tuple(elems) | PatKind::Slice(elems) | PatKind::Or(elems) => {
2473-
visit_thin_vec(elems, |elem| vis.visit_pat(elem))
2474-
}
2475-
PatKind::Paren(inner) => vis.visit_pat(inner),
2476-
PatKind::MacCall(mac) => vis.visit_mac_call(mac),
2477-
}
2478-
visit_lazy_tts(vis, tokens);
2479-
vis.visit_span(span);
2480-
}
2481-
24822450
fn walk_inline_asm_sym<T: MutVisitor>(
24832451
vis: &mut T,
24842452
InlineAsmSym { id, qself, path }: &mut InlineAsmSym,

0 commit comments

Comments
 (0)