mirror of
https://github.com/godotengine/godot
synced 2024-09-06 02:18:33 +00:00
gdscript_parser: Fix "unreachable code" false positive for loops
Depending on the conditional statements of the 'for' and 'while' loops, their body may not even execute once. For example: func a(): var arr = [] for i in arr: return i # can be reached, but analysis says cannot return -1 func b(): var should_loop = false while should_loop: return 1 # can be reached, but analysis says cannot return 0 The parser will complain that the statements after the comment cannot be reached, but it is clearly possible for our scenario. This is because the parser falsely assumes that the loop body will always execute at least once. Fix the code to remove this assumption for both of those loops.
This commit is contained in:
parent
ac58372db8
commit
7b1423a61e
|
@ -3167,7 +3167,6 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
|
|||
if (error_set) {
|
||||
return;
|
||||
}
|
||||
p_block->has_return = cf_while->body->has_return;
|
||||
p_block->statements.push_back(cf_while);
|
||||
} break;
|
||||
case GDScriptTokenizer::TK_CF_FOR: {
|
||||
|
@ -3308,7 +3307,6 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) {
|
|||
if (error_set) {
|
||||
return;
|
||||
}
|
||||
p_block->has_return = cf_for->body->has_return;
|
||||
p_block->statements.push_back(cf_for);
|
||||
} break;
|
||||
case GDScriptTokenizer::TK_CF_CONTINUE: {
|
||||
|
|
Loading…
Reference in a new issue