@@ -46,10 +46,12 @@ pub fn make_dispatch(tracevar: &str) -> (bool, Dispatch, WorkerGuard) {
46
46
( tracing, Dispatch :: new ( subscriber) , guard)
47
47
}
48
48
49
+ /* TODO: Using { $($body:tt)* } instead of $body:block) because of rustc bug refered to
50
+ in https://github.com/dtolnay/paste/issues/50 */
49
51
#[ macro_export]
50
52
macro_rules! hook {
51
53
52
- ( unsafe fn $real_fn: ident ( $( $v: ident : $t: ty) ,* ) -> $r: ty => $hook_fn: ident $ body: block ) => {
54
+ ( unsafe fn $real_fn: ident ( $( $v: ident : $t: ty) ,* ) -> $r: ty => $hook_fn: ident { $ ( $ body: tt ) * } ) => {
53
55
#[ allow( non_camel_case_types) ]
54
56
pub struct $real_fn { __private_field: ( ) }
55
57
#[ allow( non_upper_case_globals) ]
@@ -83,33 +85,33 @@ macro_rules! hook {
83
85
// #[instrument(skip( $($v),* ))]
84
86
pub unsafe fn $hook_fn ( $( $v : $t) ,* ) -> $r {
85
87
if stringify!( $real_fn) == "fopen" && !MY_DISPATCH_initialized . with( Cell :: get) {
86
- $body
88
+ $( $ body) *
87
89
} else {
88
90
MY_DISPATCH . with( |( tracing, my_dispatch, _guard) | {
89
91
// println!("tracing: {}", tracing);
90
92
if * tracing {
91
93
with_default( & my_dispatch, || {
92
94
event!( Level :: INFO , "{}()" , stringify!( $real_fn) ) ;
93
- $body
95
+ $( $ body) *
94
96
} )
95
97
} else {
96
- $body
98
+ $( $ body) *
97
99
}
98
100
} )
99
101
}
100
102
}
101
103
} ;
102
104
103
- ( unsafe fn $real_fn: ident ( $( $v: ident : $t: ty) ,* ) => $hook_fn: ident $ body: block ) => {
104
- $crate:: hook! { unsafe fn $real_fn ( $( $v : $t) ,* ) -> ( ) => $hook_fn $ body }
105
+ ( unsafe fn $real_fn: ident ( $( $v: ident : $t: ty) ,* ) => $hook_fn: ident { $ ( $ body: tt ) * } ) => {
106
+ $crate:: hook! { unsafe fn $real_fn ( $( $v : $t) ,* ) -> ( ) => $hook_fn { $ ( $ body) * } }
105
107
} ;
106
108
}
107
109
108
110
109
111
#[ macro_export]
110
112
macro_rules! vhook {
111
113
112
- ( unsafe fn $real_fn: ident ( $va: ident : $vaty: ty, $( $v: ident : $t: ty) ,* ) -> $r: ty => $hook_fn: ident $ body: block ) => {
114
+ ( unsafe fn $real_fn: ident ( $va: ident : $vaty: ty, $( $v: ident : $t: ty) ,* ) -> $r: ty => $hook_fn: ident { $ ( $ body: tt ) * } ) => {
113
115
#[ allow( non_camel_case_types) ]
114
116
pub struct $real_fn { __private_field: ( ) }
115
117
#[ allow( non_upper_case_globals) ]
@@ -153,17 +155,17 @@ macro_rules! vhook {
153
155
if * tracing {
154
156
with_default( & my_dispatch, || {
155
157
event!( Level :: INFO , "{}()" , stringify!( $real_fn) ) ;
156
- $body
158
+ $( $ body) *
157
159
} )
158
160
} else {
159
- $body
161
+ $( $ body) *
160
162
}
161
163
} )
162
164
}
163
165
} ;
164
166
165
- ( unsafe fn $real_fn: ident ( $( $v: ident : $t: ty) ,* ) => $hook_fn: ident $ body: block ) => {
166
- $crate:: hook! { unsafe fn $real_fn ( $( $v : $t) ,* ) -> ( ) => $hook_fn $ body }
167
+ ( unsafe fn $real_fn: ident ( $( $v: ident : $t: ty) ,* ) => $hook_fn: ident { $ ( $ body: tt ) * } ) => {
168
+ $crate:: hook! { unsafe fn $real_fn ( $( $v : $t) ,* ) -> ( ) => $hook_fn { $ ( $ body) * } }
167
169
} ;
168
170
}
169
171
@@ -173,7 +175,7 @@ macro_rules! dhook {
173
175
// The orig_hook is needed because variadic functions cannot be associated functions for a structure
174
176
// There is a bug open on this against rust and is being fixed.
175
177
// Until then we need to store the real function pointer in a separately named structure
176
- ( unsafe fn $real_fn: ident ( $va: ident : $vaty: ty, $( $v: ident : $t: ty) ,* ) -> $r: ty => ( $hook_fn: ident, $orig_fn: ident) $ body: block ) => {
178
+ ( unsafe fn $real_fn: ident ( $va: ident : $vaty: ty, $( $v: ident : $t: ty) ,* ) -> $r: ty => ( $hook_fn: ident, $orig_fn: ident) { $ ( $ body: tt ) * } ) => {
177
179
#[ allow( non_camel_case_types) ]
178
180
pub struct $orig_fn { __private_field: ( ) }
179
181
#[ allow( non_upper_case_globals) ]
@@ -195,10 +197,10 @@ macro_rules! dhook {
195
197
}
196
198
}
197
199
198
- $crate:: dhook! { unsafe fn $real_fn ( $va: $vaty, $( $v : $t) ,* ) -> $r => $hook_fn $ body }
200
+ $crate:: dhook! { unsafe fn $real_fn ( $va: $vaty, $( $v : $t) ,* ) -> $r => $hook_fn { $ ( $ body) * } }
199
201
} ;
200
202
201
- ( unsafe fn $real_fn: ident ( $va: ident : $vaty: ty, $( $v: ident : $t: ty) ,* ) -> $r: ty => $hook_fn: ident $ body: block ) => {
203
+ ( unsafe fn $real_fn: ident ( $va: ident : $vaty: ty, $( $v: ident : $t: ty) ,* ) -> $r: ty => $hook_fn: ident { $ ( $ body: tt ) * } ) => {
202
204
#[ no_mangle]
203
205
pub unsafe extern "C" fn $real_fn ( $( $v : $t) ,* , $va: ...) -> $r {
204
206
:: std:: panic:: catch_unwind( || {
@@ -215,21 +217,21 @@ macro_rules! dhook {
215
217
if * tracing {
216
218
with_default( & my_dispatch, || {
217
219
event!( Level :: INFO , "{}()" , stringify!( $real_fn) ) ;
218
- $body
220
+ $( $ body) *
219
221
} )
220
222
} else {
221
- $body
223
+ $( $ body) *
222
224
}
223
225
} )
224
226
}
225
227
} ;
226
228
227
- ( unsafe fn $real_fn: ident ( $va: ident : $vaty: ty, $( $v: ident : $t: ty) ,* ) => ( $hook_fn: ident, $hook_str: ident) $ body: block ) => {
228
- $crate:: dhook! { unsafe fn $real_fn ( $va: $vaty, $( $v : $t) ,* ) -> ( ) => ( $hook_fn, $hook_str) $ body }
229
+ ( unsafe fn $real_fn: ident ( $va: ident : $vaty: ty, $( $v: ident : $t: ty) ,* ) => ( $hook_fn: ident, $hook_str: ident) { $ ( $ body: tt ) * } ) => {
230
+ $crate:: dhook! { unsafe fn $real_fn ( $va: $vaty, $( $v : $t) ,* ) -> ( ) => ( $hook_fn, $hook_str) { $ ( $ body) * } }
229
231
} ;
230
232
231
- ( unsafe fn $real_fn: ident ( $va: ident : $vaty: ty, $( $v: ident : $t: ty) ,* ) => $hook_fn: ident $ body: block ) => {
232
- $crate:: dhook! { unsafe fn $real_fn ( $va: $vaty, $( $v : $t) ,* ) -> ( ) => $hook_fn $ body }
233
+ ( unsafe fn $real_fn: ident ( $va: ident : $vaty: ty, $( $v: ident : $t: ty) ,* ) => $hook_fn: ident { $ ( $ body: tt ) * } ) => {
234
+ $crate:: dhook! { unsafe fn $real_fn ( $va: $vaty, $( $v : $t) ,* ) -> ( ) => $hook_fn { $ ( $ body) * } }
233
235
} ;
234
236
235
237
}
0 commit comments