GDScript: Don't fail when freed object is return

This is check is a bit too eager. The user should be able to handle the
return value even if it's a freed object.
This commit is contained in:
George Marques 2023-04-26 10:57:22 -03:00
parent e2e870c611
commit abbdf80643
No known key found for this signature in database
GPG Key ID: 046BD46A3201E43D
3 changed files with 17 additions and 4 deletions

View File

@ -1651,10 +1651,6 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
bool was_freed = false; bool was_freed = false;
Object *obj = ret->get_validated_object_with_check(was_freed); Object *obj = ret->get_validated_object_with_check(was_freed);
if (was_freed) {
err_text = "Got a freed object as a result of the call.";
OPCODE_BREAK;
}
if (obj && obj->is_class_ptr(GDScriptFunctionState::get_class_ptr_static())) { if (obj && obj->is_class_ptr(GDScriptFunctionState::get_class_ptr_static())) {
err_text = R"(Trying to call an async function without "await".)"; err_text = R"(Trying to call an async function without "await".)";
OPCODE_BREAK; OPCODE_BREAK;

View File

@ -0,0 +1,15 @@
# https://github.com/godotengine/godot/issues/68184
var node: Node:
get:
return node
set(n):
node = n
func test():
node = Node.new()
node.free()
if !is_instance_valid(node):
print("It is freed")

View File

@ -0,0 +1,2 @@
GDTEST_OK
It is freed