1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

GDScript: Fix uninitialized local variables not being reset

This commit is contained in:
Danil Alexeev
2024-03-28 21:57:56 +03:00
parent 86415f0245
commit 27d7760f41
10 changed files with 190 additions and 73 deletions

View File

@@ -78,17 +78,17 @@ public:
if (valid && builtin_type == Variant::ARRAY && has_container_element_type(0)) {
Array array = p_variant;
if (array.is_typed()) {
GDScriptDataType array_container_type = get_container_element_type(0);
const GDScriptDataType &elem_type = container_element_types[0];
Variant::Type array_builtin_type = (Variant::Type)array.get_typed_builtin();
StringName array_native_type = array.get_typed_class_name();
Ref<Script> array_script_type_ref = array.get_typed_script();
if (array_script_type_ref.is_valid()) {
valid = (array_container_type.kind == SCRIPT || array_container_type.kind == GDSCRIPT) && array_container_type.script_type == array_script_type_ref.ptr();
valid = (elem_type.kind == SCRIPT || elem_type.kind == GDSCRIPT) && elem_type.script_type == array_script_type_ref.ptr();
} else if (array_native_type != StringName()) {
valid = array_container_type.kind == NATIVE && array_container_type.native_type == array_native_type;
valid = elem_type.kind == NATIVE && elem_type.native_type == array_native_type;
} else {
valid = array_container_type.kind == BUILTIN && array_container_type.builtin_type == array_builtin_type;
valid = elem_type.kind == BUILTIN && elem_type.builtin_type == array_builtin_type;
}
} else {
valid = false;
@@ -147,6 +147,25 @@ public:
return false;
}
bool can_contain_object() const {
if (has_type && kind == BUILTIN) {
switch (builtin_type) {
case Variant::ARRAY:
if (has_container_element_type(0)) {
return container_element_types[0].can_contain_object();
}
return true;
case Variant::DICTIONARY:
case Variant::NIL:
case Variant::OBJECT:
return true;
default:
return false;
}
}
return true;
}
void set_container_element_type(int p_index, const GDScriptDataType &p_element_type) {
ERR_FAIL_COND(p_index < 0);
while (p_index >= container_element_types.size()) {
@@ -218,6 +237,7 @@ public:
OPCODE_SET_STATIC_VARIABLE, // Only for GDScript.
OPCODE_GET_STATIC_VARIABLE, // Only for GDScript.
OPCODE_ASSIGN,
OPCODE_ASSIGN_NULL,
OPCODE_ASSIGN_TRUE,
OPCODE_ASSIGN_FALSE,
OPCODE_ASSIGN_TYPED_BUILTIN,