@@ -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