From d90a8cf89f2264dade4554973f3a8ce73086004b Mon Sep 17 00:00:00 2001 From: ProgramSnail Date: Sun, 15 Dec 2024 16:19:54 +0300 Subject: [PATCH] fixes, cleanup, some copies removed --- byterun/.gitignore | 2 +- byterun/dune | 26 +-- byterun/include/interpreter.h | 2 +- byterun/include/parser.h | 6 +- byterun/include/parser.hpp | 30 +-- byterun/include/stack.h | 6 +- byterun/include/types.h | 8 +- byterun/include/utils.h | 104 +++++++-- byterun/old-byterun.exe | Bin 182416 -> 0 bytes byterun/old_byterun.exe | Bin 182416 -> 170208 bytes byterun/performance_check.sh | 7 + byterun/src/analyzer.cpp | 70 +++--- byterun/src/cli.cpp | 23 +- byterun/src/interpreter.c | 42 ++-- byterun/src/parser.c | 388 ---------------------------------- byterun/src/parser.cpp | 325 +++++++++++++++------------- 16 files changed, 373 insertions(+), 666 deletions(-) delete mode 100755 byterun/old-byterun.exe delete mode 100644 byterun/src/parser.c diff --git a/byterun/.gitignore b/byterun/.gitignore index a279bf827..187d7b353 100644 --- a/byterun/.gitignore +++ b/byterun/.gitignore @@ -1,4 +1,4 @@ -byterun.exe +*.exe byterun build/ diff --git a/byterun/dune b/byterun/dune index 27fd457f0..6329b01cc 100644 --- a/byterun/dune +++ b/byterun/dune @@ -5,7 +5,7 @@ (:main src/cli.cpp) (:parser src/parser.cpp) (:analyzer src/analyzer.cpp) - (:obj types.o parser.o interpreter.o) + (:obj types.o interpreter.o) (:runtime ../runtime/runtime.a)) (mode (promote (until-clean))) @@ -19,7 +19,7 @@ (:main src/cli.cpp) (:parser src/parser.cpp) (:analyzer src/analyzer.cpp) - (:obj old_types.o old_parser.o old_interpreter.o) + (:obj old_types.o old_interpreter.o) (:runtime ../runtime/runtime.a)) (mode (promote (until-clean))) @@ -37,17 +37,6 @@ (action (run gcc -Iinclude/ -DWITH_CHECK -c %{src} -o %{target}))) -(rule - (target parser.o) - (deps - (:include (source_tree include)) - (:src src/parser.c) - (:runtime ../runtime/runtime.a)) - (mode - (promote (until-clean))) - (action - (run gcc -Iinclude/ -DWITH_CHECK -c %{src} -o %{target}))) - (rule (target interpreter.o) (deps @@ -70,17 +59,6 @@ (action (run gcc -Iinclude/ -c %{src} -o %{target}))) -(rule - (target old_parser.o) - (deps - (:include (source_tree include)) - (:src src/parser.c) - (:runtime ../runtime/runtime.a)) - (mode - (promote (until-clean))) - (action - (run gcc -Iinclude/ -c %{src} -o %{target}))) - (rule (target old_interpreter.o) (deps diff --git a/byterun/include/interpreter.h b/byterun/include/interpreter.h index 60d2e59f5..6c7e4a7f4 100644 --- a/byterun/include/interpreter.h +++ b/byterun/include/interpreter.h @@ -1,5 +1,5 @@ #pragma once -#include "parser.h" +#include "utils.h" void run(Bytefile *bf, int argc, char **argv); diff --git a/byterun/include/parser.h b/byterun/include/parser.h index 897e62ece..23ec0a768 100644 --- a/byterun/include/parser.h +++ b/byterun/include/parser.h @@ -19,8 +19,6 @@ DEF(CMD_BINOP_AND, &&) \ DEF(CMD_BINOP_OR, ||) -const char *read_cmd(char *ip); +const char *read_cmd(char *ip, const Bytefile *bf); -Bytefile *read_file(char *fname); - -// void dump_file(FILE *f, bytefile *bf); +// Bytefile *read_file(const char *fname); diff --git a/byterun/include/parser.hpp b/byterun/include/parser.hpp index db1c7d7d2..5b8f8b3b3 100644 --- a/byterun/include/parser.hpp +++ b/byterun/include/parser.hpp @@ -3,6 +3,7 @@ #include extern "C" { +#include "parser.h" #include "utils.h" } @@ -46,29 +47,12 @@ enum class Cmd : int8_t { Bytefile *read_file(const char *fname); -static inline int ip_read_int(char **ip, const Bytefile &bf) { - if (*ip + sizeof(int) > bf.code_ptr + bf.code_size) { - failure("last command is invalid, int parameter can not be read\n"); - } - *ip += sizeof(int); - return *(int *)((*ip) - sizeof(int)); -} - -static inline uint8_t ip_read_byte(char **ip, const Bytefile &bf) { - if (*ip + sizeof(char) > bf.code_ptr + bf.code_size) { - failure("last command is invalid, byte parameter can not be read\n"); - } - return *(*ip)++; -} - -static inline uint8_t ip_read_byte_unsafe(char **ip) { return *(*ip)++; } - -static inline const char *ip_read_string(char **ip, const Bytefile &bf) { - return get_string(&bf, ip_read_int(ip, bf)); -} - -std::pair parse_command(char **ip, const Bytefile &bf); -std::pair parse_command(char **ip, const Bytefile &bf, +std::pair parse_command(char **ip, const Bytefile *bf); +std::pair parse_command(char **ip, const Bytefile *bf, std::ostream &out); +std::pair parse_command_name(char **ip, const Bytefile *bf); + +bool is_command_name(char *ip, const Bytefile *bf, Cmd cmd); + void print_file(const Bytefile &bf, std::ostream &out); diff --git a/byterun/include/stack.h b/byterun/include/stack.h index e865a6d16..e04ecdb46 100644 --- a/byterun/include/stack.h +++ b/byterun/include/stack.h @@ -196,9 +196,11 @@ static inline void s_enter_f(char *rp, bool is_closure_call, auint args_sz, } static inline void s_exit_f() { +#ifndef WITH_CHECK if (s.fp == NULL) { s_failure(&s, "exit: no func"); } +#endif struct Frame frame = *s.fp; @@ -274,13 +276,15 @@ static inline void **var_by_category(enum VarCategory category, size_t id) { #endif var = f_args(s.fp) + (f_args_sz(s.fp) - id - 1); break; - case VAR_CLOSURE: // TODO: check that clojure vars are used only in clojures + case VAR_CLOSURE: +#ifndef WITH_CHECK if (s.fp == NULL) { s_failure(&s, "can't read closure parameter outside of function"); } if (s.fp->closure == NULL) { s_failure(&s, "can't read closure parameter not in closure"); } +#endif if (UNBOXED(s.fp->closure)) { s_failure(&s, "not boxed value expected in closure index"); } diff --git a/byterun/include/types.h b/byterun/include/types.h index 0ff7c63e2..9ef10daf7 100644 --- a/byterun/include/types.h +++ b/byterun/include/types.h @@ -69,12 +69,12 @@ void construct_state(Bytefile *bf, struct State *s, void **stack); void cleanup_state(struct State *state); static inline void s_failure(struct State *s, const char *msg) { - exec_failure(read_cmd(s->instr_ip), s->current_line, + exec_failure(read_cmd(s->instr_ip, s->bf), s->current_line, s->instr_ip - s->bf->code_ptr, msg); } static inline void ip_failure(char *ip, Bytefile *bf, const char *msg) { - exec_failure(read_cmd(ip), 0, ip - bf->code_ptr, msg); + exec_failure(read_cmd(ip, bf), 0, ip - bf->code_ptr, msg); } static inline void ip_safe_failure(char *ip, Bytefile *bf, const char *msg) { @@ -99,7 +99,7 @@ static inline enum VarCategory to_var_category(uint8_t category) { return (enum VarCategory)category; } -enum CMD { +enum CMD_TOPLVL { CMD_BINOP = 0, CMD_BASIC, CMD_LD, @@ -112,7 +112,7 @@ enum CMD { }; enum CMD_BINOPS { - CMD_BINOP_ADD = 1, // + + CMD_BINOP_ADD = 0, // + CMD_BINOP_SUB, // - CMD_BINOP_MULT, // * CMD_BINOP_DIV, // / diff --git a/byterun/include/utils.h b/byterun/include/utils.h index f8da4389d..60ee30956 100644 --- a/byterun/include/utils.h +++ b/byterun/include/utils.h @@ -26,28 +26,106 @@ static inline void exec_failure(const char *cmd, int line, aint offset, msg); } +// --- unsafe versions + +// access data + /* Gets a string from a string table by an index */ -static inline const char *get_string(const Bytefile *f, size_t pos) { - if (pos >= f->stringtab_size) { - failure("strinpg pos is out of range: %zu >= %i\n", pos, f->stringtab_size); - } - return &f->string_ptr[pos]; +static inline const char *get_string_unsafe(const Bytefile *bf, size_t pos) { + return &bf->string_ptr[pos]; +} + +/* Gets a name offset for a public symbol */ +static inline size_t get_public_name_offset_unsafe(const Bytefile *bf, + size_t i) { + return bf->public_ptr[i * 2]; } /* Gets a name for a public symbol */ -static inline const char *get_public_name(const Bytefile *f, size_t i) { - if (i >= f->public_symbols_number) { - failure("public number is out of range: %zu >= %i\n", i, - f->public_symbols_number); - } - return get_string(f, f->public_ptr[i * 2]); +static inline const char *get_public_name_unsafe(const Bytefile *bf, size_t i) { + return get_string_unsafe(bf, get_public_name_offset_unsafe(bf, i)); } /* Gets an offset for a publie symbol */ -static inline size_t get_public_offset(const Bytefile *f, size_t i) { +static inline size_t get_public_offset_unsafe(const Bytefile *bf, size_t i) { + return bf->public_ptr[i * 2 + 1]; +} + +// read from ip + +static inline uint16_t ip_read_half_int_unsafe(char **ip) { + *ip += sizeof(uint16_t); + return *(uint16_t *)((*ip) - sizeof(uint16_t)); +} + +static inline int32_t ip_read_int_unsafe(char **ip) { + *ip += sizeof(int32_t); + return *(int32_t *)((*ip) - sizeof(int32_t)); +} + +static inline uint8_t ip_read_byte_unsafe(char **ip) { return *(*ip)++; } + +static inline const char *ip_read_string_unsafe(char **ip, const Bytefile *bf) { + return get_string_unsafe(bf, ip_read_int_unsafe(ip)); +} +// --- safe versions + +// access data + +/* Gets a string from a string table by an index */ +static inline const char *get_string_safe(const Bytefile *f, size_t pos) { + if (pos >= f->stringtab_size) { + failure("string pos is out of range: %zu >= %i\n", pos, f->stringtab_size); + } + return get_string_unsafe(f, pos); +} + +/* Gets a name offset for a public symbol */ +static inline size_t get_public_name_offset_safe(const Bytefile *f, size_t i) { if (i >= f->public_symbols_number) { failure("public number is out of range: %zu >= %i\n", i, f->public_symbols_number); } - return f->public_ptr[i * 2 + 1]; + return get_public_name_offset_unsafe(f, i); +} + +/* Gets a name for a public symbol */ +static inline const char *get_public_name_safe(const Bytefile *f, size_t i) { + return get_string_safe(f, get_public_name_offset_safe(f, i)); +} + +/* Gets an offset for a publie symbol */ +static inline size_t get_public_offset_safe(const Bytefile *f, size_t i) { + if (i >= f->public_symbols_number) { + failure("public number is out of range: %zu >= %i\n", i, + f->public_symbols_number); + } + return get_public_offset_unsafe(f, i); +} + +// read from ip + +static inline uint16_t ip_read_half_int_safe(char **ip, const Bytefile *bf) { + if (*ip + sizeof(uint16_t) > bf->code_ptr + bf->code_size) { + failure("last command is invalid, int parameter can not be read\n"); + } + return ip_read_half_int_unsafe(ip); +} + +static inline int32_t ip_read_int_safe(char **ip, const Bytefile *bf) { + if (*ip + sizeof(int32_t) > bf->code_ptr + bf->code_size) { + failure("last command is invalid, int parameter can not be read\n"); + } + return ip_read_int_unsafe(ip); +} + +static inline uint8_t ip_read_byte_safe(char **ip, const Bytefile *bf) { + if (*ip + sizeof(char) > bf->code_ptr + bf->code_size) { + failure("last command is invalid, byte parameter can not be read\n"); + } + return ip_read_byte_unsafe(ip); +} + +static inline const char *ip_read_string_safe(char **ip, const Bytefile *bf) { + return get_string_safe(bf, ip_read_int_safe(ip, bf)); } diff --git a/byterun/old-byterun.exe b/byterun/old-byterun.exe deleted file mode 100755 index 4ce4edcef60147eae0af23923bc31c3c9553f1ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182416 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 diff --git a/byterun/old_byterun.exe b/byterun/old_byterun.exe index 4ce4edcef60147eae0af23923bc31c3c9553f1ce..5dcb437a9af0025e90392ccab4586d7cfb2ff3b2 100755 GIT binary patch delta 63177 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̖R-yTn&t9AW3_G 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 literal 182416 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 diff --git a/byterun/performance_check.sh b/byterun/performance_check.sh index 7175360f4..2305f9312 100755 --- a/byterun/performance_check.sh +++ b/byterun/performance_check.sh @@ -19,4 +19,11 @@ time ./old_byterun.exe -i Sort.bc > /dev/null echo "Byterun:" time ./byterun.exe -vi Sort.bc > /dev/null +echo "Byterun (verefication only):" +time ./byterun.exe -v Sort.bc > /dev/null + +echo "Byterun (run only):" +time ./byterun.exe -i Sort.bc > /dev/null + rm Sort.* +rm *.o diff --git a/byterun/src/analyzer.cpp b/byterun/src/analyzer.cpp index 202eb7879..87c2419c8 100644 --- a/byterun/src/analyzer.cpp +++ b/byterun/src/analyzer.cpp @@ -1,6 +1,7 @@ #include "analyzer.hpp" #include "parser.hpp" #include +#include extern "C" { #include "types.h" @@ -20,6 +21,7 @@ void analyze(Bytefile *bf) { const uint globals_count = bf->global_area_size; uint current_locals_count = 0; uint current_args_count = 0; + bool is_in_closure = false; uint16_t *current_begin_counter = nullptr; char *ip = bf->code_ptr; @@ -33,7 +35,6 @@ void analyze(Bytefile *bf) { visited[offset] = current_stack_depth; to_visit_jmp.push_back(offset); } else if (visited[offset] != current_stack_depth) { - // TODO: is this condition same for calls? ip_failure(saved_current_ip, bf, "different stack depth on same point is not allowed"); } @@ -61,8 +62,8 @@ void analyze(Bytefile *bf) { }; auto const check_correct_var = [&saved_current_ip, &bf, &globals_count, - ¤t_locals_count, - ¤t_args_count](uint8_t l, uint id) { + ¤t_locals_count, ¤t_args_count, + &is_in_closure](uint8_t l, uint id) { if (l > 3) { ip_failure(saved_current_ip, bf, "unexpected variable category"); } @@ -84,7 +85,11 @@ void analyze(Bytefile *bf) { } break; case VAR_CLOSURE: - // NOTE: impossible to properly check there (?) + if (!is_in_closure) { + ip_failure(saved_current_ip, bf, + "can't access closure vars outside of closure"); + } + // NOTE: impossible to properly check bounds there break; } }; @@ -92,7 +97,7 @@ void analyze(Bytefile *bf) { // add publics to_visit_func.reserve(bf->public_symbols_number); for (size_t i = 0; i < bf->public_symbols_number; ++i) { - func_control_push(get_public_offset(bf, i)); + func_control_push(get_public_offset_safe(bf, i)); } if (to_visit_func.size() == 0) { @@ -129,9 +134,9 @@ void analyze(Bytefile *bf) { saved_current_ip = current_ip; #ifdef DEBUG_VERSION - const auto [cmd, l] = parse_command(&ip, *bf, std::cout); + const auto [cmd, l] = parse_command(&ip, bf, std::cout); #else - const auto [cmd, l] = parse_command(&ip, *bf); + const auto [cmd, l] = parse_command(&ip, bf); #endif if (current_begin_counter == nullptr && cmd != Cmd::BEGIN && @@ -167,8 +172,8 @@ void analyze(Bytefile *bf) { ++current_stack_depth; break; case Cmd::SEXP: - ip_read_string(¤t_ip, *bf); - current_stack_depth -= ip_read_int(¤t_ip, *bf); + ip_read_string_unsafe(¤t_ip, bf); + current_stack_depth -= ip_read_int_unsafe(¤t_ip); if (current_stack_depth < 0) { ip_failure(saved_current_ip, bf, "not enough elements in stack"); } @@ -215,15 +220,15 @@ void analyze(Bytefile *bf) { ++current_stack_depth; break; case Cmd::LD: - check_correct_var(l, ip_read_int(¤t_ip, *bf)); + check_correct_var(l, ip_read_int_unsafe(¤t_ip)); ++current_stack_depth; break; case Cmd::LDA: - check_correct_var(l, ip_read_int(¤t_ip, *bf)); + check_correct_var(l, ip_read_int_unsafe(¤t_ip)); ++current_stack_depth; break; case Cmd::ST: - check_correct_var(l, ip_read_int(¤t_ip, *bf)); + check_correct_var(l, ip_read_int_unsafe(¤t_ip)); if (current_stack_depth < 1) { ip_failure(saved_current_ip, bf, "not enough elements in stack"); } @@ -237,47 +242,60 @@ void analyze(Bytefile *bf) { if (current_begin_counter != nullptr) { ip_failure(saved_current_ip, bf, "unexpected function beginning"); } - current_args_count = ip_read_int(¤t_ip, *bf); + current_args_count = ip_read_int_unsafe(¤t_ip); current_begin_counter = (uint16_t *)(current_ip + sizeof(uint16_t)); - current_locals_count = ip_read_int(¤t_ip, *bf); - // TODO: check uint16_t max ?? + current_locals_count = ip_read_int_unsafe(¤t_ip); + if (current_locals_count >= std::numeric_limits::max()) { + ip_failure(saved_current_ip, bf, "too many locals in functions"); + } (*(uint16_t *)(current_ip - sizeof(uint16_t))) = current_locals_count; *current_begin_counter = 0; + is_in_closure = (cmd == Cmd::CBEGIN); break; case Cmd::CLOSURE: { - ip_read_int(&ip, *bf); // offset - size_t args_count = ip_read_int(¤t_ip, *bf); // args count + uint closure_offset = ip_read_int_unsafe(¤t_ip); // closure offset + size_t args_count = ip_read_int_unsafe(¤t_ip); // args count extra_stack_during_opr = args_count; for (aint i = 0; i < args_count; i++) { - aint arg_type = ip_read_byte(¤t_ip, *bf); - aint arg_id = ip_read_int(¤t_ip, *bf); + aint arg_type = ip_read_byte_unsafe(¤t_ip); + aint arg_id = ip_read_int_unsafe(¤t_ip); check_correct_var(arg_type, arg_id); } ++current_stack_depth; + + if (closure_offset >= bf->code_size) { + ip_failure(saved_current_ip, bf, "jump/call out of file"); + } + + if (!is_command_name(bf->code_ptr + closure_offset, bf, Cmd::CBEGIN)) { + ip_failure(saved_current_ip, bf, "closure should point to cbegin"); + } } break; case Cmd::CALLC: { - uint args_count = ip_read_int(¤t_ip, *bf); + uint args_count = ip_read_int_unsafe(¤t_ip); current_stack_depth -= args_count + 1; // + closure itself if (current_stack_depth < 0) { ip_failure(saved_current_ip, bf, "not enough elements in stack"); } ++current_stack_depth; - // NOTE: can't check args == cbegin args (?) + // NOTE: can't check args == cbegin args } break; case Cmd::CALL: { - uint call_offset = ip_read_int(¤t_ip, *bf); // call offset - uint args_count = ip_read_int(¤t_ip, *bf); + uint call_offset = ip_read_int_unsafe(¤t_ip); // call offset + uint args_count = ip_read_int_unsafe(¤t_ip); current_stack_depth -= args_count; if (current_stack_depth < 0) { ip_failure(saved_current_ip, bf, "not enough elements in stack"); } ++current_stack_depth; - // TODO: unify with next loop if (call_offset >= bf->code_size) { ip_failure(saved_current_ip, bf, "jump/call out of file"); } + if (!is_command_name(bf->code_ptr + call_offset, bf, Cmd::BEGIN)) { + ip_failure(saved_current_ip, bf, "call should point to begin"); + } if (args_count != *(uint *)(bf->code_ptr + call_offset + 1)) { ip_failure(saved_current_ip, bf, "wrong call argument count"); } @@ -318,7 +336,7 @@ void analyze(Bytefile *bf) { } break; case Cmd::Barray: - current_stack_depth -= ip_read_int(¤t_ip, *bf); // elem count + current_stack_depth -= ip_read_int_unsafe(¤t_ip); // elem count if (current_stack_depth < 0) { ip_failure(saved_current_ip, bf, "not enough elements in stack"); } @@ -362,7 +380,7 @@ void analyze(Bytefile *bf) { case Cmd::JMP: { bool is_call = (cmd == Cmd::CLOSURE || cmd == Cmd::CALL); - uint jmp_p = ip_read_int(¤t_ip, *bf); + uint jmp_p = ip_read_int_unsafe(¤t_ip); if (jmp_p >= bf->code_size) { // NOTE: maybe also should check that > begin (?) ip_failure(saved_current_ip, bf, "jump/call out of file"); diff --git a/byterun/src/cli.cpp b/byterun/src/cli.cpp index 2f625becf..638562165 100644 --- a/byterun/src/cli.cpp +++ b/byterun/src/cli.cpp @@ -18,14 +18,18 @@ int main(int argc, char **argv) { bool do_verification = false; bool do_interpretation = false; bool do_print = false; - if (strcmp(argv[1], "-vi") == 0) { - do_verification = true; + if (strcmp(argv[1], "-i") == 0) { do_interpretation = true; - } else if (strcmp(argv[1], "-i") == 0) { + } +#ifdef WITH_CHECK + else if (strcmp(argv[1], "-vi") == 0) { + do_verification = true; do_interpretation = true; } else if (strcmp(argv[1], "-v") == 0) { do_verification = true; - } else if (strcmp(argv[1], "-p") == 0) { + } +#endif + else if (strcmp(argv[1], "-p") == 0) { do_print = true; } else { failure("wrong execution option (acceptable options - '-i', '-v', '-vi')"); @@ -36,20 +40,21 @@ int main(int argc, char **argv) { } Bytefile *f = read_file(argv[2]); - // #ifdef DEBUG_VERSION - // dump_file (stdout, f); - // #endif +#ifdef DEBUG_VERSION + dump_file(stdout, f); +#endif if (do_print) { print_file(*f, std::cout); } if (do_verification) { analyze(f); } - if (do_interpretation) { // TODO: switch between enabled/disabled verification + if (do_interpretation) { run(f, argc - 2, argv + 2); } - free(f->global_ptr); + // // NOTE: not used for now + // // free(f->global_ptr); free(f); return 0; diff --git a/byterun/src/interpreter.c b/byterun/src/interpreter.c index 57ed63f3b..3dc5475d6 100644 --- a/byterun/src/interpreter.c +++ b/byterun/src/interpreter.c @@ -8,6 +8,9 @@ #include "types.h" #include "utils.h" +void *__start_custom_data; +void *__stop_custom_data; + #define ASSERT_UNBOXED(memo, x) \ do \ if (!UNBOXED(x)) \ @@ -17,36 +20,35 @@ struct State s; static inline uint16_t ip_read_half_int(char **ip) { -#ifndef WITH_CHECK - if (*ip + sizeof(uint16_t) > s.bf->code_ptr + s.bf->code_size) { - failure("last command is invalid, int parameter can not be read\n"); - } +#ifdef WITH_CHECK + return ip_read_half_int_unsafe(ip); +#else + return ip_read_half_int_safe(ip, s.bf); #endif - *ip += sizeof(uint16_t); - return *(uint16_t *)((*ip) - sizeof(uint16_t)); } static inline int ip_read_int(char **ip) { -#ifndef WITH_CHECK - if (*ip + sizeof(int) > s.bf->code_ptr + s.bf->code_size) { - failure("last command is invalid, int parameter can not be read\n"); - } +#ifdef WITH_CHECK + return ip_read_int_unsafe(ip); +#else + return ip_read_int_safe(ip, s.bf); #endif - *ip += sizeof(int); - return *(int *)((*ip) - sizeof(int)); } static inline uint8_t ip_read_byte(char **ip) { -#ifndef WITH_CHECK - if (*ip + sizeof(char) > s.bf->code_ptr + s.bf->code_size) { - failure("last command is invalid, byte parameter can not be read\n"); - } +#ifdef WITH_CHECK + return ip_read_byte_unsafe(ip); +#else + return ip_read_byte_safe(ip, s.bf); #endif - return *(*ip)++; } static inline const char *ip_read_string(char **ip) { - return get_string(s.bf, ip_read_int(ip)); +#ifdef WITH_CHECK + return get_string_unsafe(s.bf, ip_read_int(ip)); +#else + return get_string_safe(s.bf, ip_read_int(ip)); +#endif } const size_t BUFFER_SIZE = 1000; @@ -107,7 +109,7 @@ void run(Bytefile *bf, int argc, char **argv) { if (l == CMD_BINOP_SUB) { s_push_i(Ls__Infix_45(fst, snd)); } else { - switch (l) { + switch (l - 1) { #define BINOP_OPR(val, op) \ case val: \ ASSERT_UNBOXED("captured op:1", fst); \ @@ -305,7 +307,6 @@ void run(Bytefile *bf, int argc, char **argv) { s_enter_f(s.call_ip /*ip from call*/, s.is_closure_call, args_sz, locals_sz); #ifndef WITH_CHECK - // TODO if ((void **)__gc_stack_top + (aint)max_additional_stack_sz - 1 <= s.stack) { s_failure(&s, "stack owerflow"); } @@ -329,7 +330,6 @@ void run(Bytefile *bf, int argc, char **argv) { #endif s_enter_f(s.call_ip /*ip from call*/, s.is_closure_call, args_sz, locals_sz); - // TODO: add ifdef #ifdef WITH_CHECK if ((void **)__gc_stack_top + (aint)max_additional_stack_sz - 1 <= s.stack) { s_failure(&s, "stack owerflow"); diff --git a/byterun/src/parser.c b/byterun/src/parser.c deleted file mode 100644 index 9e43cd03e..000000000 --- a/byterun/src/parser.c +++ /dev/null @@ -1,388 +0,0 @@ -/* Lama SM Bytecode interpreter */ - -#include -#include -#include - -#include "../../runtime/runtime.h" - -#include "types.h" -#include "utils.h" -#include "parser.h" - -void *__start_custom_data; -void *__stop_custom_data; - -/* Reads a binary bytecode file by name and unpacks it */ -Bytefile* read_file (char *fname) { - FILE *f = fopen (fname, "rb"); - Bytefile *file; - - if (f == 0) { - failure ("%s\n", strerror (errno)); - } - - if (fseek (f, 0, SEEK_END) == -1) { - failure ("%s\n", strerror (errno)); - } - - long size = ftell (f); - long additional_size = sizeof(void*) * 4 + sizeof(int); - file = (Bytefile*) malloc (size + additional_size); // file itself + additional data - - char* file_begin = (char*)file + additional_size; - char* file_end = file_begin + size; - - if (file == 0) { - failure ("unable to allocate memory to store file data\n"); - } - - rewind (f); - - if (size != fread (&file->stringtab_size, 1, size, f)) { - failure ("%s\n", strerror (errno)); - } - - fclose (f); - - long public_symbols_size = file->public_symbols_number * 2 * sizeof(int); - if (file->buffer + public_symbols_size >= file_end) { - failure ("public symbols are out of the file size\n"); - } - file->string_ptr = &file->buffer[public_symbols_size]; - if (file->string_ptr + file->stringtab_size > file_end) { - failure ("strings table is out of the file size\n"); - } - if (file->stringtab_size > 0 && file->string_ptr[file->stringtab_size - 1] != 0) { - failure ("strings table is not zero-ended\n"); - } - if (file->code_size < 0 || public_symbols_size < 0 || file->stringtab_size < 0) { - failure ("file zones sizes should be >= 0\n"); - } - - file->public_ptr = (int*) file->buffer; - file->code_ptr = &file->string_ptr [file->stringtab_size]; - file->global_ptr = (int*) calloc (file->global_area_size, sizeof (int)); - - file->code_size = size - public_symbols_size - file->stringtab_size; - - return file; -} - -const char *read_cmd(char *ip) { - uint8_t x = (*ip++), h = (x & 0xF0) >> 4, l = x & 0x0F; - - switch (h) { - case CMD_EXIT: - return "END"; - case CMD_BINOP: - return "BINOP"; - case CMD_BASIC: - switch (l) { - case CMD_BASIC_CONST: - return "CONST"; - case CMD_BASIC_STRING: - return "STRING"; - case CMD_BASIC_SEXP: - return "SEXP "; - case CMD_BASIC_STI: - return "STI"; - case CMD_BASIC_STA: - return "STA"; - case CMD_BASIC_JMP: - return "JMP"; - case CMD_BASIC_END: - return "END"; - case CMD_BASIC_RET: - return "RET"; - case CMD_BASIC_DROP: - return "DROP"; - case CMD_BASIC_DUP: - return "DUP"; - case CMD_BASIC_SWAP: - return "SWAP"; - case CMD_BASIC_ELEM: - return "ELEM"; - default: - return "_UNDEF_CMD1_"; - } - break; - - case CMD_LD: - return "LD"; - case CMD_LDA: - return "LDA"; - case CMD_ST: - return "ST"; - case CMD_CTRL: - switch (l) { - case CMD_CTRL_CJMPz: - return "CJMPz"; - case CMD_CTRL_CJMPnz: - return "CJMPnz"; - case CMD_CTRL_BEGIN: - return "BEGIN"; - case CMD_CTRL_CBEGIN: - return "CBEGIN"; - case CMD_CTRL_CLOSURE: - return "CLOSURE"; - case CMD_CTRL_CALLC: - return "CALLC"; - case CMD_CTRL_CALL: - return "CALL"; - case CMD_CTRL_TAG: - return "TAG"; - case CMD_CTRL_ARRAY: - return "ARRAY"; - case CMD_CTRL_FAIL: - return "FAIL"; - case CMD_CTRL_LINE: - return "LINE"; - default: - return "_UNDEF_CMD5_"; - } - case CMD_PATT: - return "PATT"; - case CMD_BUILTIN: { - switch (l) { - case CMD_BUILTIN_Lread: - return "CALL\tLread"; - case CMD_BUILTIN_Lwrite: - return "CALL\tLwrite"; - case CMD_BUILTIN_Llength: - return "CALL\tLlength"; - case CMD_BUILTIN_Lstring: - return "CALL\tLstring"; - case CMD_BUILTIN_Barray: - return "CALL\tBarray\t%d"; - default: - return "_UNDEF_CALL_"; - } - } - default: - return "_UNDEF_CODE_"; - } -} - -// /* Disassembles the bytecode pool */ -// void disassemble (FILE *f, bytefile *bf) { - -// # define INT (ip += sizeof (int), *(int*)(ip - sizeof (int))) -// # define BYTE *ip++ -// # define STRING get_string (bf, INT) -// # define FAIL failure ("ERROR: invalid opcode %d-%d\n", h, l) - -// char *ip = bf->code_ptr; -// char *ops [] = {"+", "-", "*", "/", "%", "<", "<=", ">", ">=", "==", "!=", "&&", "!!"}; -// char *pats[] = {"=str", "#string", "#array", "#sexp", "#ref", "#val", "#fun"}; -// char *lds [] = {"LD", "LDA", "ST"}; -// do { -// uint8_t x = BYTE, -// h = (x & 0xF0) >> 4, -// l = x & 0x0F; - -// fprintf (f, "0x%.8x:\t", ip-bf->code_ptr-1); - -// switch (h) { -// case 15: -// goto stop; - -// /* BINOP */ -// case 0: -// fprintf (f, "BINOP\t%s", ops[l-1]); -// break; - -// case 1: -// switch (l) { -// case 0: -// fprintf (f, "CONST\t%d", INT); -// break; - -// case 1: -// fprintf (f, "STRING\t%s", STRING); -// break; - -// case 2: -// fprintf (f, "SEXP\t%s ", STRING); -// fprintf (f, "%d", INT); -// break; - -// case 3: -// fprintf (f, "STI"); -// break; - -// case 4: -// fprintf (f, "STA"); -// break; - -// case 5: -// fprintf (f, "JMP\t0x%.8x", INT); -// break; - -// case 6: -// fprintf (f, "END"); -// break; - -// case 7: -// fprintf (f, "RET"); -// break; - -// case 8: -// fprintf (f, "DROP"); -// break; - -// case 9: -// fprintf (f, "DUP"); -// break; - -// case 10: -// fprintf (f, "SWAP"); -// break; - -// case 11: -// fprintf (f, "ELEM"); -// break; - -// default: -// FAIL; -// } -// break; - -// case 2: -// case 3: -// case 4: -// fprintf (f, "%s\t", lds[h-2]); -// switch (l) { -// case 0: fprintf (f, "G(%d)", INT); break; -// case 1: fprintf (f, "L(%d)", INT); break; -// case 2: fprintf (f, "A(%d)", INT); break; -// case 3: fprintf (f, "C(%d)", INT); break; -// default: FAIL; -// } -// break; - -// case 5: -// switch (l) { -// case 0: -// fprintf (f, "CJMPz\t0x%.8x", INT); -// break; - -// case 1: -// fprintf (f, "CJMPnz\t0x%.8x", INT); -// break; - -// case 2: -// fprintf (f, "BEGIN\t%d ", INT); -// fprintf (f, "%d", INT); -// break; - -// case 3: -// fprintf (f, "CBEGIN\t%d ", INT); -// fprintf (f, "%d", INT); -// break; - -// case 4: -// fprintf (f, "CLOSURE\t0x%.8x", INT); -// {int n = INT; -// for (int i = 0; i\n"); -// } - -// /* Dumps the contents of the file */ -// void dump_file (FILE *f, bytefile *bf) { -// size_t i; - -// fprintf (f, "String table size : %d\n", bf->stringtab_size); -// fprintf (f, "Global area size : %d\n", bf->global_area_size); -// fprintf (f, "Number of public symbols: %d\n", bf->public_symbols_number); -// fprintf (f, "Public symbols :\n"); - -// for (i=0; i < bf->public_symbols_number; i++) -// fprintf (f, " 0x%.8x: %s\n", get_public_offset (bf, i), get_public_name (bf, i)); - -// fprintf (f, "Code:\n"); -// disassemble (f, bf); -// } - diff --git a/byterun/src/parser.cpp b/byterun/src/parser.cpp index 949084ebf..a2795a606 100644 --- a/byterun/src/parser.cpp +++ b/byterun/src/parser.cpp @@ -8,88 +8,35 @@ #include "parser.hpp" extern "C" { +#include "types.h" #include "utils.h" } -enum CMD_TOPLVL { - CMD_BINOP = 0, - CMD_BASIC, - CMD_LD, - CMD_LDA, - CMD_ST, - CMD_CTRL, - CMD_PATT, - CMD_BUILTIN, - CMD_EXIT = 15, -}; - -enum CMD_BASICS { - CMD_BASIC_CONST = 0, - CMD_BASIC_STRING, - CMD_BASIC_SEXP, - CMD_BASIC_STI, - CMD_BASIC_STA, - CMD_BASIC_JMP, - CMD_BASIC_END, - CMD_BASIC_RET, - CMD_BASIC_DROP, - CMD_BASIC_DUP, - CMD_BASIC_SWAP, - CMD_BASIC_ELEM, -}; - -enum CMD_CTRLS { - CMD_CTRL_CJMPz = 0, - CMD_CTRL_CJMPnz, - CMD_CTRL_BEGIN, - CMD_CTRL_CBEGIN, - CMD_CTRL_CLOSURE, - CMD_CTRL_CALLC, - CMD_CTRL_CALL, - CMD_CTRL_TAG, - CMD_CTRL_ARRAY, - CMD_CTRL_FAIL, - CMD_CTRL_LINE, -}; - -enum CMD_PATTS { - CMD_PATT_STR = 0, - CMD_PATT_STR_TAG, - CMD_PATT_ARRAY_TAG, - CMD_PATT_SEXP_TAG, - CMD_PATT_REF_TAG, - CMD_PATT_VAL_TAG, - CMD_PATT_FUN_TAG, -}; - -enum CMD_BUILTINS { - CMD_BUILTIN_Lread = 0, - CMD_BUILTIN_Lwrite, - CMD_BUILTIN_Llength, - CMD_BUILTIN_Lstring, - CMD_BUILTIN_Barray, -}; - enum class ArgT { INT, OFFSET, STR, }; -#define FORALL_BINOP(DEF) \ - DEF(0, +) \ - DEF(1, -) \ - DEF(2, *) \ - DEF(3, /) \ - DEF(4, %) \ - DEF(5, <) \ - DEF(6, <=) \ - DEF(7, >) \ - DEF(8, >=) \ - DEF(9, ==) \ - DEF(10, !=) \ - DEF(11, &&) \ - DEF(12, ||) +// #define FORALL_BINOP(DEF) \ +// DEF(0, +) \ +// DEF(1, -) \ +// DEF(2, *) \ +// DEF(3, /) \ +// DEF(4, %) \ +// DEF(5, <) \ +// DEF(6, <=) \ +// DEF(7, >) \ +// DEF(8, >=) \ +// DEF(9, ==) \ +// DEF(10, !=) \ +// DEF(11, &&) \ +// DEF(12, ||) + +// extern "C" { + +// void *__start_custom_data; +// void *__stop_custom_data; // Reads a binary bytecode file by name and unpacks it Bytefile *read_file(const char *fname) { @@ -97,11 +44,11 @@ Bytefile *read_file(const char *fname) { Bytefile *file; if (f == 0) { - failure(strerror(errno)); + failure("%s\n", strerror(errno)); } if (fseek(f, 0, SEEK_END) == -1) { - failure(strerror(errno)); + failure("%s\n", strerror(errno)); } long size = ftell(f); @@ -113,48 +60,78 @@ Bytefile *read_file(const char *fname) { char *file_end = file_begin + size; if (file == 0) { - failure("unable to allocate memory to store file data"); + failure("unable to allocate memory to store file data\n"); } rewind(f); if (size != fread(&file->stringtab_size, 1, size, f)) { - failure(strerror(errno)); + failure("%s\n", strerror(errno)); } fclose(f); long public_symbols_size = file->public_symbols_number * 2 * sizeof(int); if (file->buffer + public_symbols_size >= file_end) { - failure("public symbols are out of the file size"); + failure("public symbols are out of the file size\n"); } if (file->string_ptr + file->stringtab_size > file_end) { - failure("strings table is out of the file size"); + failure("strings table is out of the file size\n"); } + // if (file->stringtab_size > 0 && + // file->string_ptr[file->stringtab_size - 1] != 0) { + // failure("strings table is not zero-ended\n"); + // } if (file->code_size < 0 || public_symbols_size < 0 || file->stringtab_size < 0) { - failure("file zones sizes should be >= 0"); + failure("file zones sizes should be >= 0\n"); } file->string_ptr = &file->buffer[public_symbols_size]; file->public_ptr = (int *)file->buffer; file->code_ptr = &file->string_ptr[file->stringtab_size]; - file->global_ptr = (int *)calloc(file->global_area_size, sizeof(int)); + // NOTE: not used for now + // file->global_ptr = (int *)calloc(file->global_area_size, sizeof(int)); + file->global_ptr = nullptr; file->code_size = size - public_symbols_size - file->stringtab_size; return file; } -std::string command_name(Cmd cmd, int8_t l) { +const char *command_name(Cmd cmd, int8_t l) { static const char *const ops[] = { -#define OP_TO_STR(id, op) #op, +#define OP_TO_STR(id, op) "BINOP:" #op, FORALL_BINOP(OP_TO_STR) #undef OP_TO_STR }; - static const char *const pats[] = {"=str", "#string", "#array", "#sexp", - "#ref", "#val", "#fun"}; - static const char *const ldts[] = {"G", "L", "A", "C"}; + static const char *const pats[] = { + "PATT:=str", "PATT:#string", "PATT:#array", "PATT:#sexp", + "PATT:#ref", "PATT:#val", "PATT:#fun"}; + +#define FORALL_LDTS(DEF) \ + DEF(G) \ + DEF(L) \ + DEF(A) \ + DEF(C) + + static const char *const ld_ldts[] = { +#define LDT_TO_STR(type) "LD:" #type, + FORALL_LDTS(LDT_TO_STR) +#undef LDT_TO_STR + }; + static const char *const lda_ldts[] = { +#define LDT_TO_STR(type) "LDA:" #type, + FORALL_LDTS(LDT_TO_STR) +#undef LDT_TO_STR + }; + static const char *const st_ldts[] = { +#define LDT_TO_STR(type) "ST:" #type, + FORALL_LDTS(LDT_TO_STR) +#undef LDT_TO_STR + }; + +#undef FORALL_LDTS switch (cmd) { case Cmd::EXIT: @@ -163,7 +140,7 @@ std::string command_name(Cmd cmd, int8_t l) { if (l - 1 >= sizeof(ops) / sizeof(char *)) { return "_UNDEF_BINOP_"; } - return "BINOP:" + std::string{ops[l - 1]}; + return ops[l - 1]; case Cmd::CONST: return "CONST"; case Cmd::STRING: @@ -189,20 +166,20 @@ std::string command_name(Cmd cmd, int8_t l) { case Cmd::ELEM: return "ELEM"; case Cmd::LD: - if (l >= sizeof(ldts) / sizeof(char *)) { + if (l >= sizeof(ld_ldts) / sizeof(char *)) { return "_UNDEF_LD_"; } - return "LD:" + std::string{ldts[l]}; + return ld_ldts[l]; case Cmd::LDA: - if (l >= sizeof(ldts) / sizeof(char *)) { + if (l >= sizeof(lda_ldts) / sizeof(char *)) { return "_UNDEF_LDA_"; } - return "LDA:" + std::string{ldts[l]}; + return lda_ldts[l]; case Cmd::ST: - if (l >= sizeof(ldts) / sizeof(char *)) { + if (l >= sizeof(st_ldts) / sizeof(char *)) { return "_UNDEF_ST_"; } - return "ST:" + std::string{ldts[l]}; + return st_ldts[l]; case Cmd::CJMPz: return "CJMPz"; case Cmd::CJMPnz: @@ -229,7 +206,7 @@ std::string command_name(Cmd cmd, int8_t l) { if (l >= sizeof(pats) / sizeof(char *)) { return "_UNDEF_PATT_"; } - return "PATT:" + std::string{pats[l]}; + return pats[l]; case Cmd::Lread: return "CALL\tLread"; case Cmd::Lwrite: @@ -246,6 +223,7 @@ std::string command_name(Cmd cmd, int8_t l) { exit(1); } +// } // extern "C" template static inline const T &print_val(std::ostream &out, const T &val) { @@ -265,7 +243,7 @@ template requires(arg == ArgT::INT) static inline uint read_print_val(char **ip, const Bytefile &bf, std::ostream &out) { - uint val = ip_read_int(ip, bf); + uint val = ip_read_int_safe(ip, &bf); if constexpr (use_out) { out << val; } @@ -276,9 +254,9 @@ template requires(arg == ArgT::OFFSET) static inline uint read_print_val(char **ip, const Bytefile &bf, std::ostream &out) { - uint val = ip_read_int(ip, bf); + uint val = ip_read_int_safe(ip, &bf); if constexpr (use_out) { - out << val; // TODO + out << val; } return val; } @@ -287,7 +265,7 @@ template requires(arg == ArgT::STR) static inline const char *read_print_val(char **ip, const Bytefile &bf, std::ostream &out) { - const char *val = ip_read_string(ip, bf); + const char *val = ip_read_string_safe(ip, &bf); if constexpr (use_out) { out << val; } @@ -320,11 +298,20 @@ static inline void read_print_cmd_seq(Cmd cmd, uint8_t l, char **ip, read_print_seq(ip, bf, out); } -template +template +static inline void read_print_cmd_seq_opt(Cmd cmd, uint8_t l, char **ip, + const Bytefile &bf, + std::ostream &out) { + if constexpr (do_read) { + read_print_cmd_seq(cmd, l, ip, bf, out); + } +} + +template std::pair parse_command_impl(char **ip, const Bytefile &bf, std::ostream &out) { static const char *const ops[] = { -#define OP_TO_STR(id, op) "op", +#define OP_TO_STR(id, op) #op, FORALL_BINOP(OP_TO_STR) #undef OP_TO_STR }; @@ -346,7 +333,7 @@ std::pair parse_command_impl(char **ip, const Bytefile &bf, Cmd cmd = Cmd::_UNDEF_; char *instr_ip = *ip; - uint8_t x = ip_read_byte(ip, bf), h = (x & 0xF0) >> 4, l = x & 0x0F; + uint8_t x = ip_read_byte_safe(ip, &bf), h = (x & 0xF0) >> 4, l = x & 0x0F; #ifdef DEBUG_VERSION printf("0x%.8lx ", *ip - bf.code_ptr - 1); @@ -356,68 +343,72 @@ std::pair parse_command_impl(char **ip, const Bytefile &bf, switch (h) { case CMD_EXIT: cmd = Cmd::EXIT; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, out); break; /* BINOP */ case CMD_BINOP: // BINOP ops[l-1] cmd = Cmd::BINOP; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, out); break; case CMD_BASIC: switch (l) { case CMD_BASIC_CONST: // CONST %d cmd = Cmd::CONST; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, + out); break; case CMD_BASIC_STRING: // STRING %s cmd = Cmd::STRING; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, + out); break; case CMD_BASIC_SEXP: // SEXP %s %d cmd = Cmd::SEXP; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt( + cmd, l, ip, bf, out); break; case CMD_BASIC_STI: // STI - write by ref (?) cmd = Cmd::STI; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, out); break; case CMD_BASIC_STA: // STA - write to array elem cmd = Cmd::STA; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, out); break; case CMD_BASIC_JMP: // JMP 0x%.8x cmd = Cmd::JMP; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, + bf, out); break; case CMD_BASIC_END: // END cmd = Cmd::END; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, out); break; case CMD_BASIC_RET: // RET cmd = Cmd::RET; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, out); break; case CMD_BASIC_DROP: // DROP cmd = Cmd::DROP; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, out); break; case CMD_BASIC_DUP: // DUP cmd = Cmd::DUP; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, out); break; case CMD_BASIC_SWAP: // SWAP cmd = Cmd::SWAP; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, out); break; case CMD_BASIC_ELEM: // ELEM cmd = Cmd::ELEM; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, out); break; default: @@ -430,89 +421,104 @@ std::pair parse_command_impl(char **ip, const Bytefile &bf, if (l > sizeof(ldts) / sizeof(char *)) { failure("wrong ld argument type"); } - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, + out); break; case CMD_LDA: // LDA %d cmd = Cmd::LDA; if (l > sizeof(ldts) / sizeof(char *)) { failure("wrong lda argument type"); } - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, + out); break; case CMD_ST: // ST %d cmd = Cmd::ST; if (l > sizeof(ldts) / sizeof(char *)) { failure("wrong st argument type"); } - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, + out); break; case CMD_CTRL: switch (l) { case CMD_CTRL_CJMPz: // CJMPnz 0x%.8x cmd = Cmd::CJMPz; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, + bf, out); break; case CMD_CTRL_CJMPnz: // CJMPnz 0x%.8x cmd = Cmd::CJMPnz; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, + bf, out); break; case CMD_CTRL_BEGIN: // BEGIN %d %d // function begin cmd = Cmd::BEGIN; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt( + cmd, l, ip, bf, out); break; case CMD_CTRL_CBEGIN: // CBEGIN %d %d cmd = Cmd::CBEGIN; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt( + cmd, l, ip, bf, out); break; case CMD_CTRL_CLOSURE: { // CLOSURE 0x%.8x cmd = Cmd::CLOSURE; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, out); print_space(out); - size_t call_p = read_print_val(ip, bf, out); - print_space(out); - size_t args_count = read_print_val(ip, bf, out); - for (size_t i = 0; i < args_count; i++) { - uint8_t arg_type = ip_read_byte(ip, bf); - if (arg_type > sizeof(ldts) / sizeof(char *)) { - failure("wrong closure argument type"); + if constexpr (do_read_args) { + size_t call_p = read_print_val(ip, bf, out); + print_space(out); + size_t args_count = read_print_val(ip, bf, out); + for (size_t i = 0; i < args_count; i++) { + uint8_t arg_type = ip_read_byte_safe(ip, &bf); + if (arg_type > sizeof(ldts) / sizeof(char *)) { + failure("wrong closure argument type"); + } + print_space(out); + print_val(out, ldts[arg_type]); + print_space(out); + read_print_val(ip, bf, out); } - print_space(out); - print_val(out, ldts[arg_type]); - print_space(out); - read_print_val(ip, bf, out); } break; } case CMD_CTRL_CALLC: // CALLC %d // call clojure cmd = Cmd::CALLC; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, + out); break; case CMD_CTRL_CALL: // CALL 0x%.8x %d // call function cmd = Cmd::CALL; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt( + cmd, l, ip, bf, out); break; case CMD_CTRL_TAG: // TAG %s %d cmd = Cmd::TAG; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt( + cmd, l, ip, bf, out); break; case CMD_CTRL_FAIL: // FAIL %d %d cmd = Cmd::FAIL; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt( + cmd, l, ip, bf, out); break; case CMD_CTRL_ARRAY: // ARRAY %d cmd = Cmd::ARRAY; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, + out); break; case CMD_CTRL_LINE: // LINE %d cmd = Cmd::LINE; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, + out); break; default: @@ -526,31 +532,32 @@ std::pair parse_command_impl(char **ip, const Bytefile &bf, failure("invalid opcode"); } cmd = Cmd::PATT; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, out); break; case CMD_BUILTIN: { switch (l) { case CMD_BUILTIN_Lread: // CALL Lread cmd = Cmd::Lread; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, out); break; case CMD_BUILTIN_Lwrite: // CALL Lwrite cmd = Cmd::Lwrite; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, out); break; case CMD_BUILTIN_Llength: // CALL Llength cmd = Cmd::Llength; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, out); break; case CMD_BUILTIN_Lstring: // CALL Lstring cmd = Cmd::Lstring; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, out); break; case CMD_BUILTIN_Barray: // CALL Barray %d cmd = Cmd::Barray; - read_print_cmd_seq(cmd, l, ip, bf, out); + read_print_cmd_seq_opt(cmd, l, ip, bf, + out); break; default: @@ -567,13 +574,21 @@ std::pair parse_command_impl(char **ip, const Bytefile &bf, return {cmd, l}; } -std::pair parse_command(char **ip, const Bytefile &bf) { - return parse_command_impl(ip, bf, std::clog); +std::pair parse_command(char **ip, const Bytefile *bf) { + return parse_command_impl(ip, *bf, std::clog); } -std::pair parse_command(char **ip, const Bytefile &bf, +std::pair parse_command(char **ip, const Bytefile *bf, std::ostream &out) { - return parse_command_impl(ip, bf, out); + return parse_command_impl(ip, *bf, out); +} + +std::pair parse_command_name(char **ip, const Bytefile *bf) { + return parse_command_impl(ip, *bf, std::clog); +} + +bool is_command_name(char *ip, const Bytefile *bf, Cmd cmd) { + return parse_command_name(&ip, bf).first == cmd; } void print_file(const Bytefile &bf, std::ostream &out) { @@ -582,7 +597,7 @@ void print_file(const Bytefile &bf, std::ostream &out) { while (true) { out << std::setfill('0') << std::setw(8) << std::hex << ip - bf.code_ptr << ": "; - const auto [cmd, l] = parse_command(&ip, bf, out); + const auto [cmd, l] = parse_command(&ip, &bf, out); out << '\n'; if (cmd == Cmd::EXIT) { @@ -590,3 +605,11 @@ void print_file(const Bytefile &bf, std::ostream &out) { } } } + +extern "C" { +const char *read_cmd(char *ip, const Bytefile *bf) { + const auto [cmd, l] = parse_command_impl(&ip, *bf, std::clog); + return command_name(cmd, l); + return ""; +} +} // extern "C"