Merge pull request #77410 from dsnopek/object-pointer-pointer-encoding
Standardize Object ptrcall encoding on `Object **`
This commit is contained in:
commit
aa5dfff3f0
|
@ -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));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -2889,7 +2889,7 @@ bool BindingsGenerator::_populate_object_type_interfaces() {
|
|||
|
||||
itype.cs_out = "%5return (%2)%0(%1);";
|
||||
|
||||
itype.c_arg_in = "(void*)%s";
|
||||
itype.c_arg_in = "&%s";
|
||||
itype.c_type = "IntPtr";
|
||||
itype.c_type_in = itype.c_type;
|
||||
itype.c_type_out = "GodotObject";
|
||||
|
|
Loading…
Reference in New Issue