@@ -39,6 +39,13 @@ macro_rules! make_ast_visitor {
39
39
} ;
40
40
}
41
41
42
+ #[ allow( unused) ]
43
+ macro_rules! return_result {
44
+ ( $V: ty) => {
45
+ macro_if!( $( $mut) ? { ( ) } else { <$V>:: Result :: output( ) } )
46
+ } ;
47
+ }
48
+
42
49
macro_rules! make_visit {
43
50
(
44
51
$ty: ty
@@ -65,6 +72,73 @@ macro_rules! make_ast_visitor {
65
72
} ;
66
73
}
67
74
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
+
68
142
/// Each method of the traits `Visitor` and `MutVisitor` trait is a hook
69
143
/// to be potentially overridden. Each method's default implementation
70
144
/// recursively visits the substructure of the input via the corresponding
0 commit comments