summaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2024-01-16 10:32:36 +0100
committerLaurenz <laurmaedje@gmail.com>2024-01-16 10:33:15 +0100
commit55a50ace1e72d739769c38cc365742aa723c5221 (patch)
tree932b27c5a95b0c10956ea34061518f1563283829 /crates
parentc2dfbd39a024f277f7a18775590f135ff7da074f (diff)
Don't discard other attributes in `time` macro
Diffstat (limited to 'crates')
-rw-r--r--crates/typst-macros/src/lib.rs2
-rw-r--r--crates/typst-macros/src/time.rs27
2 files changed, 12 insertions, 17 deletions
diff --git a/crates/typst-macros/src/lib.rs b/crates/typst-macros/src/lib.rs
index a9185a9b..5d340473 100644
--- a/crates/typst-macros/src/lib.rs
+++ b/crates/typst-macros/src/lib.rs
@@ -381,7 +381,7 @@ pub fn symbols(stream: BoundaryStream) -> BoundaryStream {
#[proc_macro_attribute]
pub fn time(stream: BoundaryStream, item: BoundaryStream) -> BoundaryStream {
let item = syn::parse_macro_input!(item as syn::ItemFn);
- time::time(stream.into(), &item)
+ time::time(stream.into(), item)
.unwrap_or_else(|err| err.to_compile_error())
.into()
}
diff --git a/crates/typst-macros/src/time.rs b/crates/typst-macros/src/time.rs
index fbe1ebc6..b0758dc2 100644
--- a/crates/typst-macros/src/time.rs
+++ b/crates/typst-macros/src/time.rs
@@ -1,12 +1,12 @@
use proc_macro2::TokenStream;
-use quote::quote;
+use quote::{quote, ToTokens};
use syn::parse::{Parse, ParseStream};
-use syn::Result;
+use syn::{parse_quote, Result};
use crate::util::{kw, parse_key_value, parse_string};
/// Expand the `#[time(..)]` macro.
-pub fn time(stream: TokenStream, item: &syn::ItemFn) -> Result<TokenStream> {
+pub fn time(stream: TokenStream, item: syn::ItemFn) -> Result<TokenStream> {
let meta: Meta = syn::parse2(stream)?;
Ok(create(meta, item))
}
@@ -26,7 +26,7 @@ impl Parse for Meta {
}
}
-fn create(meta: Meta, item: &syn::ItemFn) -> TokenStream {
+fn create(meta: Meta, mut item: syn::ItemFn) -> TokenStream {
let name = meta.name.unwrap_or_else(|| item.sig.ident.to_string());
let span = meta
.span
@@ -34,18 +34,13 @@ fn create(meta: Meta, item: &syn::ItemFn) -> TokenStream {
.map(|span| quote! { Some(#span) })
.unwrap_or_else(|| quote! { None });
- let sig = &item.sig;
- let vis = &item.vis;
- let block = &item.block;
- quote! {
- #vis #sig {
+ item.block.stmts.insert(
+ 0,
+ parse_quote! {
#[cfg(not(target_arch = "wasm32"))]
- let __scope = ::typst_timing::TimingScope::new(#name, {
- use ::typst::foundations::NativeElement;
- #span
- });
+ let __scope = ::typst_timing::TimingScope::new(#name, #span);
+ },
+ );
- #block
- }
- }
+ item.into_token_stream()
}