[FEAT] Code after return marked unreachable
This commit is contained in:
21
parser.cpp
21
parser.cpp
@@ -761,15 +761,24 @@ static void parse_call() {
|
||||
*/
|
||||
static const bool parse_statements() {
|
||||
bool return_called = false;
|
||||
bool local_return = false;
|
||||
while (!parser_finished) {
|
||||
current_line = tkn_get_line();
|
||||
switch (tkn_get_token()) {
|
||||
case TOKEN_CONST:
|
||||
tkn_next(); parse_const(); break;
|
||||
tkn_next();
|
||||
if (local_return) HALT2("Unreachable code");
|
||||
parse_const();
|
||||
break;
|
||||
case TOKEN_VAR:
|
||||
tkn_next(); parse_var(); break;
|
||||
tkn_next();
|
||||
if (local_return) HALT2("Unreachable code");
|
||||
parse_var();
|
||||
break;
|
||||
case TOKEN_IF:
|
||||
tkn_next(); if (parse_if()) { return_called = true; } break;
|
||||
tkn_next();
|
||||
if (local_return) HALT2("Unreachable code");
|
||||
if (parse_if()) { return_called = true; } break;
|
||||
/*
|
||||
case TOKEN_FOR:
|
||||
tkn_next(); parse_for(); break;
|
||||
@@ -779,7 +788,11 @@ static const bool parse_statements() {
|
||||
tkn_next(); parse_continue(); break;
|
||||
*/
|
||||
case TOKEN_RETURN:
|
||||
tkn_next(); parse_return(); return_called = true; break;
|
||||
tkn_next();
|
||||
if (local_return) HALT2("Unreachable code");
|
||||
parse_return();
|
||||
local_return = return_called = true;
|
||||
break;
|
||||
case TOKEN_REM:
|
||||
tkn_next(); break;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user