diff options
Diffstat (limited to 'modules/gdnative/gdnative/variant.cpp')
| -rw-r--r-- | modules/gdnative/gdnative/variant.cpp | 17 | 
1 files changed, 16 insertions, 1 deletions
diff --git a/modules/gdnative/gdnative/variant.cpp b/modules/gdnative/gdnative/variant.cpp index b61f80b1f9..1b2aae607f 100644 --- a/modules/gdnative/gdnative/variant.cpp +++ b/modules/gdnative/gdnative/variant.cpp @@ -29,6 +29,7 @@  /*************************************************************************/  #include "gdnative/variant.h" +#include "core/reference.h"  #include "core/variant.h"  #ifdef __cplusplus @@ -158,7 +159,21 @@ void GDAPI godot_variant_new_rid(godot_variant *r_dest, const godot_rid *p_rid)  void GDAPI godot_variant_new_object(godot_variant *r_dest, const godot_object *p_obj) {  	Variant *dest = (Variant *)r_dest;  	Object *obj = (Object *)p_obj; -	memnew_placement_custom(dest, Variant, Variant(obj)); +	Reference *reference = Object::cast_to<Reference>(obj); +	REF ref; +	if (reference) { +		ref = REF(reference); +	} +	if (!ref.is_null()) { +		memnew_placement_custom(dest, Variant, Variant(ref.get_ref_ptr())); +	} else { +#if defined(DEBUG_METHODS_ENABLED) +		if (reference) { +			ERR_PRINT("Reference object has 0 refcount in godot_variant_new_object - you lost it somewhere."); +		} +#endif +		memnew_placement_custom(dest, Variant, Variant(obj)); +	}  }  void GDAPI godot_variant_new_dictionary(godot_variant *r_dest, const godot_dictionary *p_dict) {  |