Skip to content

Commit

Permalink
Merge pull request #90134 from AThousandShips/construct_fix
Browse files Browse the repository at this point in the history
[Core] Fix `Variant::construct` of `Object`
  • Loading branch information
akien-mga committed Jul 26, 2024
2 parents 2a61a2f + 8f3e2c9 commit 7805220
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 1 deletion.
8 changes: 7 additions & 1 deletion core/variant/variant_construct.h
Original file line number Diff line number Diff line change
Expand Up @@ -153,11 +153,14 @@ class VariantConstructor {
class VariantConstructorObject {
public:
static void construct(Variant &r_ret, const Variant **p_args, Callable::CallError &r_error) {
VariantInternal::clear(&r_ret);
if (p_args[0]->get_type() == Variant::NIL) {
VariantInternal::clear(&r_ret);
VariantTypeChanger<Object *>::change(&r_ret);
VariantInternal::object_assign_null(&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 {
Expand All @@ -169,6 +172,7 @@ class VariantConstructorObject {

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]);
}
static void ptr_construct(void *base, const void **p_args) {
Expand Down Expand Up @@ -198,11 +202,13 @@ class VariantConstructorNilObject {
}

VariantInternal::clear(&r_ret);
VariantTypeChanger<Object *>::change(&r_ret);
VariantInternal::object_assign_null(&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);
}
static void ptr_construct(void *base, const void **p_args) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# https://github.com/godotengine/godot/issues/90086

class MyObj:
var obj: WeakRef

func test():
var obj_1 = MyObj.new()
var obj_2 = MyObj.new()
obj_1.obj = obj_2
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
GDTEST_RUNTIME_ERROR
>> SCRIPT ERROR
>> on function: test()
>> runtime/errors/invalid_property_assignment.gd
>> 9
>> Invalid assignment of property or key 'obj' with value of type 'RefCounted (MyObj)' on a base object of type 'RefCounted (MyObj)'.
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# https://github.com/godotengine/godot/issues/90086

class MyObj:
var obj : WeakRef

func test():
var obj_1 = MyObj.new()
var obj_2 = MyObj.new()
assert(obj_2.get_reference_count() == 1)
obj_1.set(&"obj", obj_2)
assert(obj_2.get_reference_count() == 1)
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
GDTEST_OK

0 comments on commit 7805220

Please sign in to comment.