summaryrefslogtreecommitdiff
path: root/engine-macros/src
diff options
context:
space:
mode:
Diffstat (limited to 'engine-macros/src')
-rw-r--r--engine-macros/src/reflection/enum_impl.rs24
1 files changed, 23 insertions, 1 deletions
diff --git a/engine-macros/src/reflection/enum_impl.rs b/engine-macros/src/reflection/enum_impl.rs
index a01ed8b..14142bf 100644
--- a/engine-macros/src/reflection/enum_impl.rs
+++ b/engine-macros/src/reflection/enum_impl.rs
@@ -218,6 +218,26 @@ pub fn generate(input: syn::ItemEnum) -> proc_macro2::TokenStream
&engine_crate_path,
);
+ let discriminant_layout = if is_unit_only {
+ quote! {
+ std::alloc::Layout::new::<Self>()
+ }
+ } else {
+ quote! {
+ std::alloc::Layout::new::<#mod_name::Discriminant>()
+ }
+ };
+
+ let fields_layout = if is_unit_only {
+ quote! {
+ None
+ }
+ } else {
+ quote! {
+ Some(std::alloc::Layout::new::<#mod_name::Fields>())
+ }
+ };
+
quote! {
#[doc(hidden)]
mod #mod_name {
@@ -232,7 +252,9 @@ pub fn generate(input: syn::ItemEnum) -> proc_macro2::TokenStream
#engine_crate_path::reflection::Type::Enum(
#engine_crate_path::reflection::Enum {
variants: &[#(#variants),*],
- is_unit_only: #is_unit_only
+ is_unit_only: #is_unit_only,
+ discriminant_layout: #discriminant_layout,
+ fields_layout: #fields_layout
}
)
};