[FEAT] Now unreachable code is only a warning

[FIX] Removed 'decompiled.txt' from repo
This commit is contained in:
2021-05-05 17:51:32 +02:00
parent b40e234013
commit f1c1b3e396
6 changed files with 24 additions and 31 deletions

1
.gitignore vendored
View File

@@ -2,3 +2,4 @@
.vscode .vscode
*.exe *.exe
jb jb
decompiled.txt

View File

@@ -1,24 +0,0 @@
0000: NOP
0001: NOP
0002: PUSH 4
0007: LD 72
0012: LD 60
0017: MUL
0018: SUB
0019: ST 144
0024: RET
0025: STL 4
0030: STL 0
0035: LDL 8
0040: PUSH 0
0045: GT
0046: JNT 72
0051: LDL 8
0056: RET
0057: PUSH 1
0062: STL 12
0067: JMP 82
0072: PUSH 2
0077: STL 16
0082: PUSH 1
0087: RET

View File

@@ -1,18 +1,25 @@
#include "error.h" #include "error.h"
#include <stdio.h> #include <stdio.h>
#include <string>
#include "tokenizer.h" #include "tokenizer.h"
static char errormsg[255]; static char errormsg[255];
static bool raised = false; static bool raised = false;
static std::string warning_msg = "";
void error_raise(const char* msg) { void error_raise(const char* msg) {
if (!raised) { if (!raised) {
raised = true; raised = true;
sprintf(errormsg, "ERROR AT SOURCE:%s at %d:%d.\n", msg, tkn_get_line() + 1, tkn_get_row() + 1); sprintf(errormsg, "ERROR: %s at %d:%d.\n", msg, tkn_get_line() + 1, tkn_get_row() + 1);
} }
} }
void error_warning(const char *msg) {
char warningmsg[255];
sprintf(warningmsg, "WARNING: %s at %d:%d.\n", msg, tkn_get_line() + 1, tkn_get_row() + 1);
warning_msg += warningmsg;
}
bool error_raised() { return raised; } bool error_raised() { return raised; }
void error_print(unsigned char* mem) { void error_print(unsigned char* mem) {
@@ -20,3 +27,8 @@ void error_print(unsigned char* mem) {
//while (*msg != 0) *mem++ = *msg++; //while (*msg != 0) *mem++ = *msg++;
printf("%s", errormsg); printf("%s", errormsg);
} }
void error_print_warnings() {
if (warning_msg == "") warning_msg = "Compilation OK.\n";
printf("%s", warning_msg.c_str());
}

View File

@@ -1,5 +1,7 @@
#pragma once #pragma once
void error_raise(const char* msg); void error_raise(const char* msg);
void error_warning(const char* msg);
bool error_raised(); bool error_raised();
void error_print(unsigned char* mem); void error_print(unsigned char* mem);
void error_print_warnings();

View File

@@ -762,22 +762,23 @@ static void parse_call() {
static const bool parse_statements() { static const bool parse_statements() {
bool return_called = false; bool return_called = false;
bool local_return = false; bool local_return = false;
bool already_warned = false;
while (!parser_finished) { while (!parser_finished) {
current_line = tkn_get_line(); current_line = tkn_get_line();
switch (tkn_get_token()) { switch (tkn_get_token()) {
case TOKEN_CONST: case TOKEN_CONST:
tkn_next(); tkn_next();
if (local_return) HALT2("Unreachable code"); if (local_return && !already_warned) { error_warning("Unreachable code"); already_warned = true; }
parse_const(); parse_const();
break; break;
case TOKEN_VAR: case TOKEN_VAR:
tkn_next(); tkn_next();
if (local_return) HALT2("Unreachable code"); if (local_return && !already_warned) { error_warning("Unreachable code"); already_warned = true; }
parse_var(); parse_var();
break; break;
case TOKEN_IF: case TOKEN_IF:
tkn_next(); tkn_next();
if (local_return) HALT2("Unreachable code"); if (local_return && !already_warned) { error_warning("Unreachable code"); already_warned = true; }
if (parse_if()) { return_called = true; } break; if (parse_if()) { return_called = true; } break;
/* /*
case TOKEN_FOR: case TOKEN_FOR:
@@ -789,7 +790,7 @@ static const bool parse_statements() {
*/ */
case TOKEN_RETURN: case TOKEN_RETURN:
tkn_next(); tkn_next();
if (local_return) HALT2("Unreachable code"); if (local_return && !already_warned) { error_warning("Unreachable code"); already_warned = true; }
parse_return(); parse_return();
local_return = return_called = true; local_return = return_called = true;
break; break;
@@ -875,6 +876,7 @@ void parser_parse(const char* buffer, byte* mem) {
//emmit(OP_JMP); //emmit(OP_JMP);
//emmit_w(0xA000); //emmit_w(0xA000);
} else { } else {
error_print_warnings();
decompiler_save(code, codepos); decompiler_save(code, codepos);
} }

View File

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