aboutsummaryrefslogtreecommitdiffstats
path: root/components/domobject_derive/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/domobject_derive/lib.rs')
-rw-r--r--components/domobject_derive/lib.rs21
1 files changed, 12 insertions, 9 deletions
diff --git a/components/domobject_derive/lib.rs b/components/domobject_derive/lib.rs
index ac99c4fa16a..10225fb2302 100644
--- a/components/domobject_derive/lib.rs
+++ b/components/domobject_derive/lib.rs
@@ -35,7 +35,7 @@ fn expand_dom_object(input: syn::DeriveInput) -> proc_macro2::TokenStream {
let name = &input.ident;
let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl();
- let mut items = quote! {
+ let items = quote! {
impl #impl_generics ::js::conversions::ToJSValConvertible for #name #ty_generics #where_clause {
#[allow(unsafe_code)]
unsafe fn to_jsval(&self,
@@ -66,7 +66,15 @@ fn expand_dom_object(input: syn::DeriveInput) -> proc_macro2::TokenStream {
crate::DomObject::reflector(self) == crate::DomObject::reflector(other)
}
}
+ };
+
+ let mut params = proc_macro2::TokenStream::new();
+ params.append_separated(
+ input.generics.type_params().map(|param| &param.ident),
+ quote! {,},
+ );
+ let mut dummy_items = quote! {
// Generic trait with a blanket impl over `()` for all types.
// becomes ambiguous if impl
trait NoDomObjectInDomObject<A> {
@@ -83,13 +91,7 @@ fn expand_dom_object(input: syn::DeriveInput) -> proc_macro2::TokenStream {
impl<T> NoDomObjectInDomObject<Invalid> for T where T: ?Sized + crate::DomObject {}
};
- let mut params = proc_macro2::TokenStream::new();
- params.append_separated(
- input.generics.type_params().map(|param| &param.ident),
- quote! {,},
- );
-
- items.append_all(field_types.iter().enumerate().map(|(i, ty)| {
+ dummy_items.append_all(field_types.iter().enumerate().map(|(i, ty)| {
let s = syn::Ident::new(&format!("S{i}"), proc_macro2::Span::call_site());
quote! {
struct #s<#params>(#params);
@@ -111,7 +113,8 @@ fn expand_dom_object(input: syn::DeriveInput) -> proc_macro2::TokenStream {
);
let tokens = quote! {
#[allow(non_upper_case_globals)]
- const #dummy_const: () = { #items };
+ const #dummy_const: () = { #dummy_items };
+ #items
};
tokens