[FEAT] Code after return marked unreachable
This commit is contained in:
@@ -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
|
||||
|
||||
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;
|
||||
|
||||
|
||||
4
test.vb
4
test.vb
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user