Fix GDScript analyzer null literal
This commit is contained in:
parent
0bb94df247
commit
3228fdb88a
3 changed files with 20 additions and 11 deletions
|
@ -1747,6 +1747,12 @@ void GDScriptAnalyzer::resolve_variable(GDScriptParser::VariableNode *p_variable
|
|||
|
||||
type = p_variable->initializer->get_datatype();
|
||||
|
||||
#ifdef DEBUG_ENABLED
|
||||
if (p_variable->initializer->type == GDScriptParser::Node::CALL && type.is_hard_type() && type.kind == GDScriptParser::DataType::BUILTIN && type.builtin_type == Variant::NIL) {
|
||||
parser->push_warning(p_variable->initializer, GDScriptWarning::VOID_ASSIGNMENT, static_cast<GDScriptParser::CallNode *>(p_variable->initializer)->function_name);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (p_variable->infer_datatype) {
|
||||
type.type_source = GDScriptParser::DataType::ANNOTATED_INFERRED;
|
||||
|
||||
|
@ -1760,11 +1766,6 @@ void GDScriptAnalyzer::resolve_variable(GDScriptParser::VariableNode *p_variable
|
|||
} else {
|
||||
type.type_source = GDScriptParser::DataType::INFERRED;
|
||||
}
|
||||
#ifdef DEBUG_ENABLED
|
||||
if (p_variable->initializer->type == GDScriptParser::Node::CALL && type.kind == GDScriptParser::DataType::BUILTIN && type.builtin_type == Variant::NIL) {
|
||||
parser->push_warning(p_variable->initializer, GDScriptWarning::VOID_ASSIGNMENT, static_cast<GDScriptParser::CallNode *>(p_variable->initializer)->function_name);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (p_variable->datatype_specifier != nullptr) {
|
||||
|
@ -1843,7 +1844,7 @@ void GDScriptAnalyzer::resolve_constant(GDScriptParser::ConstantNode *p_constant
|
|||
type = p_constant->initializer->get_datatype();
|
||||
|
||||
#ifdef DEBUG_ENABLED
|
||||
if (p_constant->initializer->type == GDScriptParser::Node::CALL && type.kind == GDScriptParser::DataType::BUILTIN && type.builtin_type == Variant::NIL) {
|
||||
if (p_constant->initializer->type == GDScriptParser::Node::CALL && type.is_hard_type() && type.kind == GDScriptParser::DataType::BUILTIN && type.builtin_type == Variant::NIL) {
|
||||
parser->push_warning(p_constant->initializer, GDScriptWarning::VOID_ASSIGNMENT, static_cast<GDScriptParser::CallNode *>(p_constant->initializer)->function_name);
|
||||
}
|
||||
#endif
|
||||
|
@ -2331,7 +2332,7 @@ void GDScriptAnalyzer::reduce_assignment(GDScriptParser::AssignmentNode *p_assig
|
|||
}
|
||||
|
||||
#ifdef DEBUG_ENABLED
|
||||
if (p_assignment->assigned_value->type == GDScriptParser::Node::CALL && assigned_value_type.kind == GDScriptParser::DataType::BUILTIN && assigned_value_type.builtin_type == Variant::NIL) {
|
||||
if (p_assignment->assigned_value->type == GDScriptParser::Node::CALL && assigned_value_type.is_hard_type() && assigned_value_type.kind == GDScriptParser::DataType::BUILTIN && assigned_value_type.builtin_type == Variant::NIL) {
|
||||
parser->push_warning(p_assignment->assigned_value, GDScriptWarning::VOID_ASSIGNMENT, static_cast<GDScriptParser::CallNode *>(p_assignment->assigned_value)->function_name);
|
||||
} else if (assignee_type.is_hard_type() && assignee_type.builtin_type == Variant::INT && assigned_value_type.builtin_type == Variant::FLOAT) {
|
||||
parser->push_warning(p_assignment->assigned_value, GDScriptWarning::NARROWING_CONVERSION);
|
||||
|
@ -3979,10 +3980,7 @@ GDScriptParser::DataType GDScriptAnalyzer::type_from_variant(const Variant &p_va
|
|||
result.builtin_type = p_value.get_type();
|
||||
result.type_source = GDScriptParser::DataType::ANNOTATED_EXPLICIT; // Constant has explicit type.
|
||||
|
||||
if (p_value.get_type() == Variant::NIL) {
|
||||
// A null value is a variant, not void.
|
||||
result.kind = GDScriptParser::DataType::VARIANT;
|
||||
} else if (p_value.get_type() == Variant::OBJECT) {
|
||||
if (p_value.get_type() == Variant::OBJECT) {
|
||||
// Object is treated as a native type, not a builtin type.
|
||||
result.kind = GDScriptParser::DataType::NATIVE;
|
||||
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
# https://github.com/godotengine/godot/issues/61159
|
||||
|
||||
func get_param():
|
||||
return null
|
||||
|
||||
func test():
|
||||
var v = get_param()
|
||||
v = get_param()
|
||||
print(v)
|
|
@ -0,0 +1,2 @@
|
|||
GDTEST_OK
|
||||
<null>
|
Loading…
Reference in a new issue