diff options
Diffstat (limited to 'core/variant/variant_internal.h')
-rw-r--r-- | core/variant/variant_internal.h | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/core/variant/variant_internal.h b/core/variant/variant_internal.h index aaafa2f6b6..3696ffae60 100644 --- a/core/variant/variant_internal.h +++ b/core/variant/variant_internal.h @@ -111,6 +111,10 @@ public: } } + _FORCE_INLINE_ static bool initialize_ref(Object *object) { + return Variant::initialize_ref(object); + } + // Atomic types. _FORCE_INLINE_ static bool *get_bool(Variant *v) { return &v->_data._bool; } _FORCE_INLINE_ static const bool *get_bool(const Variant *v) { return &v->_data._bool; } @@ -1430,10 +1434,15 @@ struct VariantTypeConstructor<Object *> { _FORCE_INLINE_ static void variant_from_type(void *p_variant, void *p_value) { Variant *variant = reinterpret_cast<Variant *>(p_variant); VariantInitializer<Object *>::init(variant); - Object *value = *(reinterpret_cast<Object **>(p_value)); - if (value) { - VariantInternalAccessor<Object *>::set(variant, value); - VariantInternalAccessor<ObjectID>::set(variant, value->get_instance_id()); + Object *object = *(reinterpret_cast<Object **>(p_value)); + if (object) { + if (object->is_ref_counted()) { + if (!VariantInternal::initialize_ref(object)) { + return; + } + } + VariantInternalAccessor<Object *>::set(variant, object); + VariantInternalAccessor<ObjectID>::set(variant, object->get_instance_id()); } } |