GDScript: Disallow return with value in void functions

This commit is contained in:
Dmitrii Maganov 2022-12-28 07:12:16 +02:00
parent 7e1bd3f95a
commit 9507f65e25
7 changed files with 20 additions and 0 deletions

View File

@ -2044,6 +2044,9 @@ void GDScriptAnalyzer::resolve_return(GDScriptParser::ReturnNode *p_return) {
update_array_literal_element_type(expected_type, static_cast<GDScriptParser::ArrayNode *>(p_return->return_value));
}
}
if (has_expected_type && expected_type.is_hard_type() && expected_type.kind == GDScriptParser::DataType::BUILTIN && expected_type.builtin_type == Variant::NIL) {
push_error("A void function cannot return a value.", p_return);
}
result = p_return->return_value->get_datatype();
} else {
// Return type is null by default.

View File

@ -0,0 +1,2 @@
func test() -> void:
return null

View File

@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
A void function cannot return a value.

View File

@ -0,0 +1,4 @@
func test() -> void:
var a
a = 1
return a

View File

@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
A void function cannot return a value.

View File

@ -0,0 +1,5 @@
func variant() -> Variant:
return 'variant'
func test():
print(variant())

View File

@ -0,0 +1,2 @@
GDTEST_OK
variant