INNER CODE UNIT · Rust
profile
jerthz/scion · external/profiling_macro/src/lib.rs:12
pub fn profile(attr: TokenStream, item: TokenStream) -> TokenStream {
let mut input_fn = parse_macro_input!(item as ItemFn);
let fn_name = input_fn.sig.ident.to_string();
let label = if attr.is_empty() {
LitStr::new(&fn_name, input_fn.sig.ident.span())
} else {
parse_macro_input!(attr as LitStr)
};
let block = input_fn.block;
input_fn.block = Box::new(
syn::parse2(quote!({
#[cfg(feature = "profiling")]
let _profile_guard = profiling::ProfileGuard::new(#label);
#block
}))
.expect("profiling macro failed"),
);