[FEAT] Now unreachable code is only a warning
[FIX] Removed 'decompiled.txt' from repo
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -2,3 +2,4 @@
|
|||||||
.vscode
|
.vscode
|
||||||
*.exe
|
*.exe
|
||||||
jb
|
jb
|
||||||
|
decompiled.txt
|
||||||
|
|||||||
@@ -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
|
|
||||||
16
error.cpp
16
error.cpp
@@ -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());
|
||||||
|
}
|
||||||
2
error.h
2
error.h
@@ -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();
|
||||||
|
|||||||
10
parser.cpp
10
parser.cpp
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
test.vb
2
test.vb
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user