Messages in this thread Patch in this message | | | Date | Sun, 30 Jul 2023 19:51:03 -0700 | From | Boqun Feng <> | Subject | Re: [PATCH v3 03/13] rust: add derive macro for `Zeroable` |
| |
On Sat, Jul 29, 2023 at 09:09:35AM +0000, Benno Lossin wrote: [...] > diff --git a/rust/macros/quote.rs b/rust/macros/quote.rs > index dddbb4e6f4cb..b76c198a4ed5 100644 > --- a/rust/macros/quote.rs > +++ b/rust/macros/quote.rs > @@ -124,6 +124,12 @@ macro_rules! quote_spanned { > )); > quote_spanned!(@proc $v $span $($tt)*); > }; > + (@proc $v:ident $span:ident ; $($tt:tt)*) => { > + $v.push(::proc_macro::TokenTree::Punct( > + ::proc_macro::Punct::new(';', ::proc_macro::Spacing::Alone) > + )); > + quote_spanned!(@proc $v $span $($tt)*); > + }; > (@proc $v:ident $span:ident $id:ident $($tt:tt)*) => { > $v.push(::proc_macro::TokenTree::Ident(::proc_macro::Ident::new(stringify!($id), $span))); > quote_spanned!(@proc $v $span $($tt)*); > diff --git a/rust/macros/zeroable.rs b/rust/macros/zeroable.rs > new file mode 100644 > index 000000000000..0d605c46ab3b > --- /dev/null > +++ b/rust/macros/zeroable.rs > @@ -0,0 +1,72 @@ [...] > + TokenTree::Punct(p) if nested == 0 && p.as_char() == ':' => { > + new_impl_generics.push(tt); > + if in_generic { > + new_impl_generics.extend(quote! { ::kernel::init::Zeroable + }); Looks like the support of '+' in `quote!` is missing ;-)
Regards, Boqun
> + inserted = true; > + } > + } > + TokenTree::Punct(p) if p.as_char() == '<' => { > + nested += 1; > + new_impl_generics.push(tt); > + } > + TokenTree::Punct(p) if p.as_char() == '>' => { > + assert!(nested > 0); > + nested -= 1; > + new_impl_generics.push(tt); > + } > + _ => new_impl_generics.push(tt), > + } > + } > + assert_eq!(nested, 0); > + if in_generic && !inserted { > + new_impl_generics.extend(quote! { : ::kernel::init::Zeroable }); > + } > + quote! { > + ::kernel::__derive_zeroable!( > + parse_input: > + @sig(#(#rest)*), > + @impl_generics(#(#new_impl_generics)*), > + @ty_generics(#(#ty_generics)*), > + @body(#last), > + ); > + } > +} > -- > 2.41.0 > >
| |