summaryrefslogtreecommitdiffstats
path: root/core/object
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-06-07 13:31:49 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-06-07 13:31:49 +0200
commitaa5dfff3f0a0398b1422c4230a0cff4bdd969dd8 (patch)
tree0f4862afe24e4f181bf4a9e6d0dfe56ad8f0d751 /core/object
parent17bfccc5943c130e4c40ad00983655bb9422f124 (diff)
parent77733faedea4bb9bc0fa148b576aaf737e96889a (diff)
downloadredot-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.h10
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));
}
};