Attempt to standardize Object ptrcall encoding on Object **

This commit is contained in:
David Snopek
2023-05-23 15:14:01 -05:00
parent 2eec9a67d5
commit 77733faede
4 changed files with 18 additions and 6 deletions

View File

@@ -159,7 +159,10 @@ MAKE_PTRARG_BY_REFERENCE(Variant);
template <class T>
struct PtrToArg<T *> {
_FORCE_INLINE_ static T *convert(const void *p_ptr) {
return const_cast<T *>(reinterpret_cast<const T *>(p_ptr));
if (p_ptr == nullptr) {
return nullptr;
}
return const_cast<T *>(*reinterpret_cast<T *const *>(p_ptr));
}
typedef Object *EncodeT;
_FORCE_INLINE_ static void encode(T *p_var, void *p_ptr) {
@@ -170,7 +173,10 @@ struct PtrToArg<T *> {
template <class T>
struct PtrToArg<const T *> {
_FORCE_INLINE_ static const T *convert(const void *p_ptr) {
return reinterpret_cast<const T *>(p_ptr);
if (p_ptr == nullptr) {
return nullptr;
}
return *reinterpret_cast<T *const *>(p_ptr);
}
typedef const Object *EncodeT;
_FORCE_INLINE_ static void encode(T *p_var, void *p_ptr) {

View File

@@ -502,7 +502,7 @@ public:
case Variant::PACKED_COLOR_ARRAY:
return get_color_array(v);
case Variant::OBJECT:
return v->_get_obj().obj;
return get_object(v);
case Variant::VARIANT_MAX:
ERR_FAIL_V(nullptr);
}