Răsfoiți Sursa

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.
Tan Wang Leng 5 ani în urmă
părinte
comite
7b1423a61e
1 a modificat fișierele cu 0 adăugiri și 2 ștergeri
  1. 0 2
      modules/gdscript/gdscript_parser.cpp

+ 0 - 2
modules/gdscript/gdscript_parser.cpp

@@ -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: {