[Core] Make enum variant cast and encoding 64 bits

This should fix various issues where retrieving enum values from
scripting languages would result in corrupted values (where 32 bits
were valid, and the other 32 random data).
This commit is contained in:
Fabio Alessandrelli 2021-07-27 12:07:42 +02:00
parent 77ca5e7b21
commit 95088f6bfa

View File

@ -69,17 +69,17 @@ struct VariantCaster<const T &> {
template <> \ template <> \
struct VariantCaster<m_enum> { \ struct VariantCaster<m_enum> { \
static _FORCE_INLINE_ m_enum cast(const Variant &p_variant) { \ static _FORCE_INLINE_ m_enum cast(const Variant &p_variant) { \
return (m_enum)p_variant.operator int(); \ return (m_enum)p_variant.operator int64_t(); \
} \ } \
}; \ }; \
template <> \ template <> \
struct PtrToArg<m_enum> { \ struct PtrToArg<m_enum> { \
_FORCE_INLINE_ static m_enum convert(const void *p_ptr) { \ _FORCE_INLINE_ static m_enum convert(const void *p_ptr) { \
return m_enum(*reinterpret_cast<const int *>(p_ptr)); \ return m_enum(*reinterpret_cast<const int64_t *>(p_ptr)); \
} \ } \
typedef int64_t EncodeT; \ typedef int64_t EncodeT; \
_FORCE_INLINE_ static void encode(m_enum p_val, const void *p_ptr) { \ _FORCE_INLINE_ static void encode(m_enum p_val, const void *p_ptr) { \
*(int *)p_ptr = p_val; \ *(int64_t *)p_ptr = p_val; \
} \ } \
}; };