Skip to content

Commit 65b5fe4

Browse files
committed
Unify walk_pat
1 parent 5c4c2ae commit 65b5fe4

File tree

1 file changed

+54
-85
lines changed

1 file changed

+54
-85
lines changed

compiler/rustc_ast/src/visitors.rs

Lines changed: 54 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -955,6 +955,59 @@ macro_rules! make_ast_visitor {
955955
return_result!(V)
956956
}
957957

958+
pub fn walk_pat<$($lt,)? V: $trait$(<$lt>)?>(
959+
vis: &mut V,
960+
pattern: ref_t!(Pat)
961+
) -> result!(V) {
962+
let Pat { id, kind, span, tokens } = pattern;
963+
try_v!(visit_id!(vis, id));
964+
match kind {
965+
PatKind::Err(_guar) => {}
966+
PatKind::Wild | PatKind::Rest | PatKind::Never => {}
967+
PatKind::Ident(_binding_mode, ident, sub) => {
968+
try_v!(visit_ident!(vis, ident));
969+
visit_o!(sub, |sub| vis.visit_pat(sub));
970+
}
971+
PatKind::Lit(e) => {
972+
try_v!(vis.visit_expr(e));
973+
}
974+
PatKind::TupleStruct(qself, path, elems) => {
975+
try_v!(vis.visit_qself(qself));
976+
try_v!(vis.visit_path(path, *id));
977+
visit_list!(vis, visit_pat, elems);
978+
}
979+
PatKind::Path(qself, path) => {
980+
try_v!(vis.visit_qself(qself));
981+
try_v!(vis.visit_path(path, *id));
982+
}
983+
PatKind::Struct(qself, path, fields, _etc) => {
984+
try_v!(vis.visit_qself(qself));
985+
try_v!(vis.visit_path(path, *id));
986+
visit_list!(vis, visit_pat_field, flat_map_pat_field, fields);
987+
}
988+
PatKind::Box(inner) | PatKind::Deref(inner) | PatKind::Paren(inner) => {
989+
try_v!(vis.visit_pat(inner));
990+
}
991+
PatKind::Ref(inner, _mutbl) => {
992+
try_v!(vis.visit_pat(inner));
993+
}
994+
PatKind::Range(e1, e2, Spanned { span, node: _ }) => {
995+
visit_o!(e1, |e| vis.visit_expr(e));
996+
visit_o!(e2, |e| vis.visit_expr(e));
997+
try_v!(visit_span!(vis, span));
998+
}
999+
PatKind::Tuple(elems) | PatKind::Slice(elems) | PatKind::Or(elems) => {
1000+
visit_list!(vis, visit_pat, elems);
1001+
}
1002+
PatKind::MacCall(mac) => {
1003+
try_v!(vis.visit_mac_call(mac));
1004+
}
1005+
}
1006+
visit_lazy_tts!(vis, tokens);
1007+
try_v!(visit_span!(vis, span));
1008+
return_result!(V)
1009+
}
1010+
9581011
make_walk_flat_map!{Arm, walk_flat_map_arm, visit_arm}
9591012
make_walk_flat_map!{Attribute, walk_flat_map_attribute, visit_attribute}
9601013
make_walk_flat_map!{ExprField, walk_flat_map_expr_field, visit_expr_field}
@@ -987,6 +1040,7 @@ pub mod visit {
9871040
pub use rustc_ast_ir::{try_visit, visit_opt, walk_list, walk_visitable_list};
9881041
use rustc_span::symbol::Ident;
9891042
use rustc_span::Span;
1043+
use rustc_span::source_map::Spanned;
9901044

9911045
use crate::ast::*;
9921046
use crate::ptr::P;
@@ -1279,48 +1333,6 @@ pub mod visit {
12791333
V::Result::output()
12801334
}
12811335

1282-
pub fn walk_pat<'a, V: Visitor<'a>>(visitor: &mut V, pattern: &'a Pat) -> V::Result {
1283-
let Pat { id, kind, span: _, tokens: _ } = pattern;
1284-
match kind {
1285-
PatKind::TupleStruct(opt_qself, path, elems) => {
1286-
try_visit!(visitor.visit_qself(opt_qself));
1287-
try_visit!(visitor.visit_path(path, *id));
1288-
walk_list!(visitor, visit_pat, elems);
1289-
}
1290-
PatKind::Path(opt_qself, path) => {
1291-
try_visit!(visitor.visit_qself(opt_qself));
1292-
try_visit!(visitor.visit_path(path, *id))
1293-
}
1294-
PatKind::Struct(opt_qself, path, fields, _rest) => {
1295-
try_visit!(visitor.visit_qself(opt_qself));
1296-
try_visit!(visitor.visit_path(path, *id));
1297-
walk_list!(visitor, visit_pat_field, fields);
1298-
}
1299-
PatKind::Box(subpattern) | PatKind::Deref(subpattern) | PatKind::Paren(subpattern) => {
1300-
try_visit!(visitor.visit_pat(subpattern));
1301-
}
1302-
PatKind::Ref(subpattern, _ /*mutbl*/) => {
1303-
try_visit!(visitor.visit_pat(subpattern));
1304-
}
1305-
PatKind::Ident(_bmode, ident, optional_subpattern) => {
1306-
try_visit!(visitor.visit_ident(*ident));
1307-
visit_opt!(visitor, visit_pat, optional_subpattern);
1308-
}
1309-
PatKind::Lit(expression) => try_visit!(visitor.visit_expr(expression)),
1310-
PatKind::Range(lower_bound, upper_bound, _end) => {
1311-
visit_opt!(visitor, visit_expr, lower_bound);
1312-
visit_opt!(visitor, visit_expr, upper_bound);
1313-
}
1314-
PatKind::Wild | PatKind::Rest | PatKind::Never => {}
1315-
PatKind::Err(_guar) => {}
1316-
PatKind::Tuple(elems) | PatKind::Slice(elems) | PatKind::Or(elems) => {
1317-
walk_list!(visitor, visit_pat, elems);
1318-
}
1319-
PatKind::MacCall(mac) => try_visit!(visitor.visit_mac_call(mac)),
1320-
}
1321-
V::Result::output()
1322-
}
1323-
13241336
impl WalkItemKind for ForeignItemKind {
13251337
fn walk<'a, V: Visitor<'a>>(
13261338
&'a self,
@@ -2534,49 +2546,6 @@ pub mod mut_visit {
25342546
}
25352547
}
25362548

2537-
pub fn walk_pat<T: MutVisitor>(vis: &mut T, pat: &mut P<Pat>) {
2538-
let Pat { id, kind, span, tokens } = pat.deref_mut();
2539-
vis.visit_id(id);
2540-
match kind {
2541-
PatKind::Err(_guar) => {}
2542-
PatKind::Wild | PatKind::Rest | PatKind::Never => {}
2543-
PatKind::Ident(_binding_mode, ident, sub) => {
2544-
vis.visit_ident(ident);
2545-
visit_opt(sub, |sub| vis.visit_pat(sub));
2546-
}
2547-
PatKind::Lit(e) => vis.visit_expr(e),
2548-
PatKind::TupleStruct(qself, path, elems) => {
2549-
vis.visit_qself(qself);
2550-
vis.visit_path(path, *id);
2551-
visit_thin_vec(elems, |elem| vis.visit_pat(elem));
2552-
}
2553-
PatKind::Path(qself, path) => {
2554-
vis.visit_qself(qself);
2555-
vis.visit_path(path, *id);
2556-
}
2557-
PatKind::Struct(qself, path, fields, _etc) => {
2558-
vis.visit_qself(qself);
2559-
vis.visit_path(path, *id);
2560-
fields.flat_map_in_place(|field| vis.flat_map_pat_field(field));
2561-
}
2562-
PatKind::Box(inner) => vis.visit_pat(inner),
2563-
PatKind::Deref(inner) => vis.visit_pat(inner),
2564-
PatKind::Ref(inner, _mutbl) => vis.visit_pat(inner),
2565-
PatKind::Range(e1, e2, Spanned { span: _, node: _ }) => {
2566-
visit_opt(e1, |e| vis.visit_expr(e));
2567-
visit_opt(e2, |e| vis.visit_expr(e));
2568-
vis.visit_span(span);
2569-
}
2570-
PatKind::Tuple(elems) | PatKind::Slice(elems) | PatKind::Or(elems) => {
2571-
visit_thin_vec(elems, |elem| vis.visit_pat(elem))
2572-
}
2573-
PatKind::Paren(inner) => vis.visit_pat(inner),
2574-
PatKind::MacCall(mac) => vis.visit_mac_call(mac),
2575-
}
2576-
visit_lazy_tts(vis, tokens);
2577-
vis.visit_span(span);
2578-
}
2579-
25802549
fn walk_inline_asm_sym<T: MutVisitor>(
25812550
vis: &mut T,
25822551
InlineAsmSym { id, qself, path }: &mut InlineAsmSym,

0 commit comments

Comments
 (0)