Skip to content

Commit da3fc63

Browse files
committed
Unify walk_pat
1 parent 1e89ad9 commit da3fc63

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
@@ -892,6 +892,59 @@ macro_rules! make_ast_visitor {
892892
}
893893
return_result!(V)
894894
}
895+
896+
pub fn walk_pat<$($lt,)? V: $trait$(<$lt>)?>(
897+
vis: &mut V,
898+
pattern: ref_t!(Pat)
899+
) -> result!(V) {
900+
let Pat { id, kind, span, tokens } = pattern;
901+
try_v!(visit_id!(vis, id));
902+
match kind {
903+
PatKind::Err(_guar) => {}
904+
PatKind::Wild | PatKind::Rest | PatKind::Never => {}
905+
PatKind::Ident(_binding_mode, ident, sub) => {
906+
try_v!(vis.visit_ident(ident));
907+
visit_o!(sub, |sub| vis.visit_pat(sub));
908+
}
909+
PatKind::Lit(e) => {
910+
try_v!(vis.visit_expr(e));
911+
}
912+
PatKind::TupleStruct(qself, path, elems) => {
913+
try_v!(vis.visit_qself(qself));
914+
try_v!(vis.visit_path(path, *id));
915+
visit_list!(vis, visit_pat, elems);
916+
}
917+
PatKind::Path(qself, path) => {
918+
try_v!(vis.visit_qself(qself));
919+
try_v!(vis.visit_path(path, *id));
920+
}
921+
PatKind::Struct(qself, path, fields, _etc) => {
922+
try_v!(vis.visit_qself(qself));
923+
try_v!(vis.visit_path(path, *id));
924+
visit_list!(vis, visit_pat_field, flat_map_pat_field, fields);
925+
}
926+
PatKind::Box(inner) | PatKind::Deref(inner) | PatKind::Paren(inner) => {
927+
try_v!(vis.visit_pat(inner));
928+
}
929+
PatKind::Ref(inner, _mutbl) => {
930+
try_v!(vis.visit_pat(inner));
931+
}
932+
PatKind::Range(e1, e2, Spanned { span, node: _ }) => {
933+
visit_o!(e1, |e| vis.visit_expr(e));
934+
visit_o!(e2, |e| vis.visit_expr(e));
935+
try_v!(visit_span!(vis, span));
936+
}
937+
PatKind::Tuple(elems) | PatKind::Slice(elems) | PatKind::Or(elems) => {
938+
visit_list!(vis, visit_pat, elems);
939+
}
940+
PatKind::MacCall(mac) => {
941+
try_v!(vis.visit_mac_call(mac));
942+
}
943+
}
944+
visit_lazy_tts!(vis, tokens);
945+
try_v!(visit_span!(vis, span));
946+
return_result!(V)
947+
}
895948
}
896949
}
897950

@@ -1207,48 +1260,6 @@ pub mod visit {
12071260
V::Result::output()
12081261
}
12091262

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

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

0 commit comments

Comments
 (0)