summaryrefslogtreecommitdiffstats
path: root/core/variant/variant_construct.h
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-10-02 15:00:47 +0200
committerRémi Verschelde <rverschelde@gmail.com>2024-10-02 15:00:47 +0200
commit9ce149c7a3cd940d734ec50a4ce78d246d0012ef (patch)
tree2cd3ab2c1dee386225c8937fe50df6ef46010952 /core/variant/variant_construct.h
parent7f1f9799c5955af4e29ecb7d4d3d765ad36f5beb (diff)
parentcee0e6667a2583a128ab3de33ab43f06222c4ca9 (diff)
downloadredot-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.h9
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);