diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-10-02 15:00:47 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-10-02 15:00:47 +0200 |
commit | 9ce149c7a3cd940d734ec50a4ce78d246d0012ef (patch) | |
tree | 2cd3ab2c1dee386225c8937fe50df6ef46010952 /core/variant/variant_construct.h | |
parent | 7f1f9799c5955af4e29ecb7d4d3d765ad36f5beb (diff) | |
parent | cee0e6667a2583a128ab3de33ab43f06222c4ca9 (diff) | |
download | redot-engine-9ce149c7a3cd940d734ec50a4ce78d246d0012ef.tar.gz |
Merge pull request #93299 from rune-scape/fix-ref
Fix RefCounted releasing early and not clearing reference
Diffstat (limited to 'core/variant/variant_construct.h')
-rw-r--r-- | core/variant/variant_construct.h | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/core/variant/variant_construct.h b/core/variant/variant_construct.h index 68210a9451..f625419da7 100644 --- a/core/variant/variant_construct.h +++ b/core/variant/variant_construct.h @@ -156,14 +156,14 @@ public: if (p_args[0]->get_type() == Variant::NIL) { VariantInternal::clear(&r_ret); VariantTypeChanger<Object *>::change(&r_ret); - VariantInternal::object_assign_null(&r_ret); + VariantInternal::object_reset_data(&r_ret); r_error.error = Callable::CallError::CALL_OK; } else if (p_args[0]->get_type() == Variant::OBJECT) { - VariantInternal::clear(&r_ret); VariantTypeChanger<Object *>::change(&r_ret); VariantInternal::object_assign(&r_ret, p_args[0]); r_error.error = Callable::CallError::CALL_OK; } else { + VariantInternal::clear(&r_ret); r_error.error = Callable::CallError::CALL_ERROR_INVALID_ARGUMENT; r_error.argument = 0; r_error.expected = Variant::OBJECT; @@ -171,7 +171,6 @@ public: } static inline void validated_construct(Variant *r_ret, const Variant **p_args) { - VariantInternal::clear(r_ret); VariantTypeChanger<Object *>::change(r_ret); VariantInternal::object_assign(r_ret, p_args[0]); } @@ -203,13 +202,13 @@ public: VariantInternal::clear(&r_ret); VariantTypeChanger<Object *>::change(&r_ret); - VariantInternal::object_assign_null(&r_ret); + VariantInternal::object_reset_data(&r_ret); } static inline void validated_construct(Variant *r_ret, const Variant **p_args) { VariantInternal::clear(r_ret); VariantTypeChanger<Object *>::change(r_ret); - VariantInternal::object_assign_null(r_ret); + VariantInternal::object_reset_data(r_ret); } static void ptr_construct(void *base, const void **p_args) { PtrConstruct<Object *>::construct(nullptr, base); |