[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

@@ -9,18 +9,16 @@
0024: RET
0025: STL 4
0030: STL 0
0035: PUSH 1
0040: RET
0041: LDL 8
0046: PUSH 0
0051: GT
0052: JNT 78
0035: LDL 8
0040: PUSH 0
0045: GT
0046: JNT 72
0051: LDL 8
0056: RET
0057: PUSH 1
0062: STL 12
0067: LDL 8
0072: RET
0073: JMP 94
0078: PUSH 2
0083: STL 16
0088: PUSH 1
0093: RET
0067: JMP 82
0072: PUSH 2
0077: STL 16
0082: PUSH 1
0087: RET

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;

View File

@@ -15,12 +15,12 @@ const perico as number = 4-peiv[1].a.x * peiv[0].c.y[2]
function tarari(a as number, b as number) as number
var local1 as number
return 1
if local1 > 0 then
var local1 as number = 1
return local1
var local1 as number = 1
else
var local3 as number = 2
end
return 1
end