summaryrefslogtreecommitdiffstats
path: root/core/variant/variant_internal.h
diff options
context:
space:
mode:
authorRémi Verschelde <remi@verschelde.fr>2022-02-11 15:10:51 +0100
committerGitHub <noreply@github.com>2022-02-11 15:10:51 +0100
commit275f26cb5700f4877aba65779129d97c4a5965b5 (patch)
tree24e3a20a8a02ae3c283a2a4a1deff9c87c2e6c88 /core/variant/variant_internal.h
parentf4478843cafc7577dc73911921e49204210acbac (diff)
parent3ad3a430638af0b64511d90d367e3b35245d9b48 (diff)
downloadredot-engine-275f26cb5700f4877aba65779129d97c4a5965b5.tar.gz
Merge pull request #57968 from reduz/variant-ref-assignment-fix
Diffstat (limited to 'core/variant/variant_internal.h')
-rw-r--r--core/variant/variant_internal.h17
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());
}
}