Browse Source

Merge pull request #73544 from mashumafi/fix-func-arg-null

Fix: Func with typed args error when arg is null
Rémi Verschelde 2 years ago
parent
commit
ea2bc9795c

+ 6 - 4
modules/gdscript/gdscript_function.h

@@ -105,9 +105,10 @@ public:
 					return false;
 				}
 
-				Object *obj = p_variant.get_validated_object();
+				bool was_freed = false;
+				Object *obj = p_variant.get_validated_object_with_check(was_freed);
 				if (!obj) {
-					return false;
+					return !was_freed;
 				}
 
 				if (!ClassDB::is_parent_class(obj->get_class_name(), native_type)) {
@@ -124,9 +125,10 @@ public:
 					return false;
 				}
 
-				Object *obj = p_variant.get_validated_object();
+				bool was_freed = false;
+				Object *obj = p_variant.get_validated_object_with_check(was_freed);
 				if (!obj) {
-					return false;
+					return !was_freed;
 				}
 
 				Ref<Script> base = obj && obj->get_script_instance() ? obj->get_script_instance()->get_script() : nullptr;

+ 27 - 0
modules/gdscript/tests/scripts/runtime/features/typed_argument_is_null.gd

@@ -0,0 +1,27 @@
+# https://github.com/godotengine/godot/issues/72967
+
+class CustomNode:
+	extends Node
+
+	static func test_custom_node(n: CustomNode):
+		if not n:
+			print("null node")
+
+func test():
+	test_typed_argument_is_null()
+
+func get_custom_node() -> CustomNode:
+	return null
+
+func test_typed_argument_is_null():
+	var node: Node = Node.new()
+	print_node_name(node.get_parent())
+	node.free()
+	test_custom_node()
+
+func test_custom_node():
+	CustomNode.test_custom_node(get_custom_node())
+
+func print_node_name(n: Node):
+	if not n:
+		print("null node")

+ 3 - 0
modules/gdscript/tests/scripts/runtime/features/typed_argument_is_null.out

@@ -0,0 +1,3 @@
+GDTEST_OK
+null node
+null node