diff --git a/decompiled.txt b/decompiled.txt index 6bf37e5..9a3b8c4 100644 --- a/decompiled.txt +++ b/decompiled.txt @@ -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 diff --git a/parser.cpp b/parser.cpp index b86c581..a0c2371 100644 --- a/parser.cpp +++ b/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; diff --git a/test.vb b/test.vb index 53ff69a..27bd477 100644 --- a/test.vb +++ b/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