Skip to content

Commit ba06226

Browse files
committed
Add return_result!, defer_P!, visit_{id,span}!, try_v! and visit_{o,list}!
1 parent cf591ff commit ba06226

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

compiler/rustc_ast/src/visitors.rs

+74
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ macro_rules! make_ast_visitor {
3939
};
4040
}
4141

42+
#[allow(unused)]
43+
macro_rules! return_result {
44+
($V: ty) => {
45+
macro_if!($($mut)? { () } else { <$V>::Result::output() })
46+
};
47+
}
48+
4249
macro_rules! make_visit {
4350
(
4451
$ty: ty
@@ -65,6 +72,73 @@ macro_rules! make_ast_visitor {
6572
};
6673
}
6774

75+
#[allow(unused)]
76+
macro_rules! deref_P {
77+
($p: expr) => {
78+
macro_if!{$($mut)? {
79+
$p.deref_mut()
80+
} else {
81+
$p
82+
}}
83+
};
84+
}
85+
86+
#[allow(unused)]
87+
macro_rules! visit_id {
88+
($vis: ident, $id: ident) => {
89+
macro_if!{ $($mut)? {
90+
$vis.visit_id($id)
91+
} else {
92+
// assign to _ to prevent unused_variable warnings
93+
let _ = (&$vis, &$id);
94+
}}
95+
};
96+
}
97+
98+
#[allow(unused)]
99+
macro_rules! visit_span {
100+
($vis: ident, $span: ident) => {
101+
macro_if!{ $($mut)? {
102+
$vis.visit_span($span)
103+
} else {
104+
// assign to _ to prevent unused_variable warnings
105+
let _ = (&$vis, &$span);
106+
}}
107+
};
108+
}
109+
110+
#[allow(unused)]
111+
macro_rules! try_v {
112+
($visit: expr) => {
113+
macro_if!{$($mut)? { $visit } else { try_visit!($visit) }}
114+
};
115+
}
116+
117+
#[allow(unused)]
118+
macro_rules! visit_o {
119+
($opt: expr, $fn: expr) => {
120+
if let Some(elem) = $opt {
121+
try_v!($fn(elem))
122+
}
123+
};
124+
}
125+
126+
#[allow(unused)]
127+
macro_rules! visit_list {
128+
($visitor: expr, $visit: ident, $flat_map: ident, $list: expr $$(; $$($arg: expr),*)?) => {
129+
macro_if!{$($mut)? {
130+
$list.flat_map_in_place(|x| $visitor.$flat_map(x $$(, $$($arg),*)?))
131+
} else {
132+
visit_list!($visitor, $visit, $list $$(; $$($arg),*)?)
133+
}}
134+
};
135+
($visitor: expr, $visit: ident, $list: expr $$(; $$($arg: expr),*)?) => {
136+
for elem in $list {
137+
try_v!($visitor.$visit(elem $$(, $$($arg),*)?));
138+
}
139+
};
140+
}
141+
68142
/// Each method of the traits `Visitor` and `MutVisitor` trait is a hook
69143
/// to be potentially overridden. Each method's default implementation
70144
/// recursively visits the substructure of the input via the corresponding

0 commit comments

Comments
 (0)