diff options
Diffstat (limited to 'matrix-macros/src')
-rw-r--r-- | matrix-macros/src/lib.rs | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/matrix-macros/src/lib.rs b/matrix-macros/src/lib.rs index 8099fd6..b12d30b 100644 --- a/matrix-macros/src/lib.rs +++ b/matrix-macros/src/lib.rs @@ -1,16 +1,15 @@ use proc_macro::TokenStream; -use syn::{ItemFn, parse::Parse, Token, LitBool, LitInt}; +use syn::{ItemFn, parse::Parse, Token, LitInt}; use quote::quote; struct NativeFuncParams { arity: LitInt, - variadic: LitBool, + variadic: Option<Token![..]>, } impl Parse for NativeFuncParams { fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> { let arity = input.parse()?; - input.parse::<Token![,]>()?; let variadic = input.parse()?; Ok(Self { arity , variadic }) } @@ -22,7 +21,7 @@ pub fn native_func(input: TokenStream, annotated_item: TokenStream) -> TokenStre let input: NativeFuncParams = syn::parse(input).unwrap(); let arity = input.arity; - let variadic = input.variadic; + let variadic = input.variadic.is_some(); let visibility = itemfn.vis; let block = itemfn.block; @@ -43,7 +42,11 @@ pub fn native_func(input: TokenStream, annotated_item: TokenStream) -> TokenStre name: ::std::rc::Rc::from( #name_str ), arity: #arity, variadic: #variadic, - fun: ::matrix::chunk::InnerFunction::Native(Box::new(|#inputs| #output #block)) + fun: ::matrix::chunk::InnerFunction::Native( + ::std::rc::Rc::new( + |#inputs| #output #block + ) + ) }) } }; |