[FEAT] Code after return marked unreachable

This commit is contained in:
2021-05-05 17:26:54 +02:00
parent b62cbd2cda
commit b40e234013
3 changed files with 30 additions and 19 deletions

View File

@@ -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;