[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
|
||||
*.exe
|
||||
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 <stdio.h>
|
||||
#include <string>
|
||||
#include "tokenizer.h"
|
||||
|
||||
static char errormsg[255];
|
||||
static bool raised = false;
|
||||
|
||||
static std::string warning_msg = "";
|
||||
|
||||
void error_raise(const char* msg) {
|
||||
if (!raised) {
|
||||
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; }
|
||||
|
||||
void error_print(unsigned char* mem) {
|
||||
@@ -20,3 +27,8 @@ void error_print(unsigned char* mem) {
|
||||
//while (*msg != 0) *mem++ = *msg++;
|
||||
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
|
||||
|
||||
void error_raise(const char* msg);
|
||||
void error_warning(const char* msg);
|
||||
bool error_raised();
|
||||
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() {
|
||||
bool return_called = false;
|
||||
bool local_return = false;
|
||||
bool already_warned = false;
|
||||
while (!parser_finished) {
|
||||
current_line = tkn_get_line();
|
||||
switch (tkn_get_token()) {
|
||||
case TOKEN_CONST:
|
||||
tkn_next();
|
||||
if (local_return) HALT2("Unreachable code");
|
||||
if (local_return && !already_warned) { error_warning("Unreachable code"); already_warned = true; }
|
||||
parse_const();
|
||||
break;
|
||||
case TOKEN_VAR:
|
||||
tkn_next();
|
||||
if (local_return) HALT2("Unreachable code");
|
||||
if (local_return && !already_warned) { error_warning("Unreachable code"); already_warned = true; }
|
||||
parse_var();
|
||||
break;
|
||||
case TOKEN_IF:
|
||||
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;
|
||||
/*
|
||||
case TOKEN_FOR:
|
||||
@@ -789,7 +790,7 @@ static const bool parse_statements() {
|
||||
*/
|
||||
case TOKEN_RETURN:
|
||||
tkn_next();
|
||||
if (local_return) HALT2("Unreachable code");
|
||||
if (local_return && !already_warned) { error_warning("Unreachable code"); already_warned = true; }
|
||||
parse_return();
|
||||
local_return = return_called = true;
|
||||
break;
|
||||
@@ -875,6 +876,7 @@ void parser_parse(const char* buffer, byte* mem) {
|
||||
//emmit(OP_JMP);
|
||||
//emmit_w(0xA000);
|
||||
} else {
|
||||
error_print_warnings();
|
||||
decompiler_save(code, codepos);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user