GDScript: Disallow type inference with untyped initializer

This commit is contained in:
Dmitrii Maganov 2023-01-13 20:51:29 +02:00
parent 228db366bf
commit a1e0281b45
9 changed files with 20 additions and 9 deletions

View file

@ -1544,10 +1544,8 @@ void GDScriptAnalyzer::resolve_assignable(GDScriptParser::AssignableNode *p_assi
GDScriptParser::DataType initializer_type = p_assignable->initializer->get_datatype();
if (p_assignable->infer_datatype) {
if (!initializer_type.is_set() || initializer_type.has_no_type()) {
if (!initializer_type.is_set() || initializer_type.has_no_type() || !initializer_type.is_hard_type()) {
push_error(vformat(R"(Cannot infer the type of "%s" %s because the value doesn't have a set type.)", p_assignable->identifier->name, p_kind), p_assignable->initializer);
} else if (initializer_type.is_variant() && !initializer_type.is_hard_type()) {
push_error(vformat(R"(Cannot infer the type of "%s" %s because the value is Variant. Use explicit "Variant" type if this is intended.)", p_assignable->identifier->name, p_kind), p_assignable->initializer);
} else if (initializer_type.kind == GDScriptParser::DataType::BUILTIN && initializer_type.builtin_type == Variant::NIL && !is_constant) {
push_error(vformat(R"(Cannot infer the type of "%s" %s because the value is "null".)", p_assignable->identifier->name, p_kind), p_assignable->initializer);
}

View file

@ -0,0 +1,3 @@
func test():
var untyped = 1
var inferred := untyped

View file

@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
Cannot infer the type of "inferred" variable because the value doesn't have a set type.

View file

@ -0,0 +1,5 @@
var untyped = 1
var inferred := untyped
func test():
pass

View file

@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
Cannot infer the type of "inferred" variable because the value doesn't have a set type.

View file

@ -0,0 +1,5 @@
func check(untyped = 1, inferred := untyped):
pass
func test():
check()

View file

@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
Cannot infer the type of "inferred" parameter because the value doesn't have a set type.

View file

@ -1,9 +1,4 @@
func test():
var one_0 = 0
one_0 = 1
var one_1 := one_0
print(one_1)
var two: Variant = 0
two += 2
print(two)