Added check for null objects in gdscript typed assign.

This commit is contained in:
ocean (they/them) 2023-02-21 15:29:07 -05:00
parent 7e79aead99
commit 9ddf482a06
3 changed files with 47 additions and 20 deletions

View File

@ -1326,28 +1326,30 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
OPCODE_BREAK;
}
ScriptInstance *scr_inst = val_obj->get_script_instance();
if (!scr_inst) {
err_text = "Trying to assign value of type '" + val_obj->get_class_name() +
"' to a variable of type '" + base_type->get_path().get_file() + "'.";
OPCODE_BREAK;
}
Script *src_type = val_obj->get_script_instance()->get_script().ptr();
bool valid = false;
while (src_type) {
if (src_type == base_type) {
valid = true;
break;
if (val_obj) { // src is not null
ScriptInstance *scr_inst = val_obj->get_script_instance();
if (!scr_inst) {
err_text = "Trying to assign value of type '" + val_obj->get_class_name() +
"' to a variable of type '" + base_type->get_path().get_file() + "'.";
OPCODE_BREAK;
}
src_type = src_type->get_base_script().ptr();
}
if (!valid) {
err_text = "Trying to assign value of type '" + val_obj->get_script_instance()->get_script()->get_path().get_file() +
"' to a variable of type '" + base_type->get_path().get_file() + "'.";
OPCODE_BREAK;
Script *src_type = scr_inst->get_script().ptr();
bool valid = false;
while (src_type) {
if (src_type == base_type) {
valid = true;
break;
}
src_type = src_type->get_base_script().ptr();
}
if (!valid) {
err_text = "Trying to assign value of type '" + val_obj->get_script_instance()->get_script()->get_path().get_file() +
"' to a variable of type '" + base_type->get_path().get_file() + "'.";
OPCODE_BREAK;
}
}
}
#endif // DEBUG_ENABLED

View File

@ -0,0 +1,18 @@
extends Node
class LocalClass extends Node:
pass
func test():
var typed: LocalClass = get_node_or_null("does_not_exist")
var untyped = null
var node_1: LocalClass = typed
var node_2: LocalClass = untyped
var node_3 = typed
var node_4 = untyped
print(typed)
print(untyped)
print(node_1)
print(node_2)
print(node_3)
print(node_4)

View File

@ -0,0 +1,7 @@
GDTEST_OK
<Object#null>
<null>
<Object#null>
<null>
<Object#null>
<null>