diff options
| author | HampusM <hampus@hampusmat.com> | 2026-07-03 21:13:09 +0200 |
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2026-07-03 21:13:09 +0200 |
| commit | 23c4199cac2ce8c0c91ac1e3d9b46fcc1ff72d7a (patch) | |
| tree | 58f91bb734d33fb146a9da892981ef6adb31619d | |
| parent | 02523dc455a526decd037bc5a9e3a46475ff097f (diff) | |
| -rw-r--r-- | engine-macros/src/reflection/enum_impl.rs | 8 | ||||
| -rw-r--r-- | engine-reflection/src/lib.rs | 26 |
2 files changed, 15 insertions, 19 deletions
diff --git a/engine-macros/src/reflection/enum_impl.rs b/engine-macros/src/reflection/enum_impl.rs index 41aa673..ea83681 100644 --- a/engine-macros/src/reflection/enum_impl.rs +++ b/engine-macros/src/reflection/enum_impl.rs @@ -228,10 +228,6 @@ fn generate_variants<'a>( if let Some(field_ident) = &field.ident { quote! { std::mem::offset_of!( - #mod_name::Equivalent #generic_args, - payload.#variant_ident - ) + - std::mem::offset_of!( #mod_name::#variant_fields_struct_ident #generic_args, #field_ident @@ -275,10 +271,6 @@ fn generate_variants<'a>( quote! { std::mem::offset_of!( - #mod_name::Equivalent #generic_args, - payload.#variant_ident - ) + - std::mem::offset_of!( #mod_name::#variant_fields_struct_ident #generic_args, #field_index diff --git a/engine-reflection/src/lib.rs b/engine-reflection/src/lib.rs index 600c511..9f347fa 100644 --- a/engine-reflection/src/lib.rs +++ b/engine-reflection/src/lib.rs @@ -91,14 +91,15 @@ impl Type } #[inline] - pub fn cast_dyn_any(&self, ptr: NonNull<c_void>) -> Option<NonNull<dyn Any>> { + pub fn cast_dyn_any(&self, ptr: NonNull<c_void>) -> Option<NonNull<dyn Any>> + { match self { Self::Struct(struct_type) => Some((struct_type.cast_dyn_any)(ptr)), Self::Enum(enum_type) => Some((enum_type.cast_dyn_any)(ptr)), Self::Literal(literal_type) => Some((literal_type.cast_dyn_any)(ptr)), Self::Array(array_type) => Some((array_type.cast_dyn_any)(ptr)), Self::Reference(ref_type) => Some((ref_type.cast_dyn_any)(ptr)), - Self::Slice(_) => None + Self::Slice(_) => None, } } } @@ -108,7 +109,7 @@ pub struct Struct { pub fields: &'static [Field], pub get_default_value: fn() -> Option<DefaultValueFn>, - pub cast_dyn_any: CastDynAnyFn + pub cast_dyn_any: CastDynAnyFn, } impl Struct @@ -140,7 +141,7 @@ pub struct Enum pub tagged_union: Option<EnumTaggedUnion>, pub get_default_value: fn() -> Option<DefaultValueFn>, - pub cast_dyn_any: CastDynAnyFn + pub cast_dyn_any: CastDynAnyFn, } impl Enum @@ -218,8 +219,11 @@ pub struct Field pub index: usize, pub layout: Layout, - /// Byte offset to the field relative to the start of the type containing it. If the - /// type containing the field is a enum, this offset will include the enum tag + /// Byte offset to the field relative to the start of the type containing it. + /// + /// If the type containing the field is a enum variant, this offset is relative to + /// the payload field of the enum's equivalent tagged union, therefore this offset + /// will **NOT** include the enum tag pub byte_offset: usize, pub type_id: TypeId, @@ -248,7 +252,7 @@ pub struct Array pub item_layout: Layout, pub get_item_type_name: FnWithDebug<&'static str>, pub length: usize, - pub cast_dyn_any: CastDynAnyFn + pub cast_dyn_any: CastDynAnyFn, } impl Array @@ -284,7 +288,7 @@ pub struct Literal pub ty: LiteralType, pub type_name: fn() -> &'static str, pub get_default_value: fn() -> Option<DefaultValueFn>, - pub cast_dyn_any: CastDynAnyFn + pub cast_dyn_any: CastDynAnyFn, } impl Literal @@ -306,7 +310,7 @@ impl Literal pub struct Reference { pub ty: &'static Type, - pub cast_dyn_any: CastDynAnyFn + pub cast_dyn_any: CastDynAnyFn, } #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] @@ -392,7 +396,7 @@ unsafe impl<T: Reflection, const LEN: usize> Reflection for [T; LEN] item_layout: Layout::new::<T>(), get_item_type_name: FnWithDebug::new(|| type_name::<T>()), length: LEN, - cast_dyn_any: |ptr| ptr.cast::<Self>() + cast_dyn_any: |ptr| ptr.cast::<Self>(), }); } @@ -409,7 +413,7 @@ unsafe impl<T: Reflection> Reflection for &'static T { const TYPE_REFLECTION: &Type = &Type::Reference(Reference { ty: T::TYPE_REFLECTION, - cast_dyn_any: |ptr| ptr.cast::<Self>() + cast_dyn_any: |ptr| ptr.cast::<Self>(), }); } |
