diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-06-07 13:31:49 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-06-07 13:31:49 +0200 |
commit | aa5dfff3f0a0398b1422c4230a0cff4bdd969dd8 (patch) | |
tree | 0f4862afe24e4f181bf4a9e6d0dfe56ad8f0d751 /core/object | |
parent | 17bfccc5943c130e4c40ad00983655bb9422f124 (diff) | |
parent | 77733faedea4bb9bc0fa148b576aaf737e96889a (diff) | |
download | redot-engine-aa5dfff3f0a0398b1422c4230a0cff4bdd969dd8.tar.gz |
Merge pull request #77410 from dsnopek/object-pointer-pointer-encoding
Standardize Object ptrcall encoding on `Object **`
Diffstat (limited to 'core/object')
-rw-r--r-- | core/object/ref_counted.h | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/core/object/ref_counted.h b/core/object/ref_counted.h index 58706fb9a9..3386514706 100644 --- a/core/object/ref_counted.h +++ b/core/object/ref_counted.h @@ -242,8 +242,11 @@ public: template <class T> struct PtrToArg<Ref<T>> { _FORCE_INLINE_ static Ref<T> convert(const void *p_ptr) { + if (p_ptr == nullptr) { + return Ref<T>(); + } // p_ptr points to a RefCounted object - return Ref<T>(const_cast<T *>(reinterpret_cast<const T *>(p_ptr))); + return Ref<T>(const_cast<T *>(*reinterpret_cast<T *const *>(p_ptr))); } typedef Ref<T> EncodeT; @@ -259,8 +262,11 @@ struct PtrToArg<const Ref<T> &> { typedef Ref<T> EncodeT; _FORCE_INLINE_ static Ref<T> convert(const void *p_ptr) { + if (p_ptr == nullptr) { + return Ref<T>(); + } // p_ptr points to a RefCounted object - return Ref<T>((T *)p_ptr); + return Ref<T>(*((T *const *)p_ptr)); } }; |