Merge pull request #70656 from vonagam/fix-void-returns

GDScript: Disallow return with value in void functions
This commit is contained in:
Rémi Verschelde 2023-01-03 12:20:33 +01:00
commit e4c1103af4
No known key found for this signature in database
GPG Key ID: C3336907360768E1
7 changed files with 20 additions and 0 deletions

View File

@ -2047,6 +2047,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