From b25d4412874f710f6ed51864dbf440040a0e9f9c Mon Sep 17 00:00:00 2001 From: ProgramSnail Date: Mon, 16 Dec 2024 10:50:09 +0300 Subject: [PATCH] fixes --- byterun/old_byterun.exe | Bin 170208 -> 0 bytes byterun/regression_check.sh | 18 +++++++++++ byterun/src/analyzer.cpp | 60 ++++++++++++++++++------------------ 3 files changed, 48 insertions(+), 30 deletions(-) delete mode 100755 byterun/old_byterun.exe create mode 100755 byterun/regression_check.sh diff --git a/byterun/old_byterun.exe b/byterun/old_byterun.exe deleted file mode 100755 index 5dcb437a9af0025e90392ccab4586d7cfb2ff3b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170208 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 /dev/null + +prefix="../regression/" +suffix=".lama" + +for test in ../regression/*.lama; do + echo $test + lamac -b $test > /dev/null + ./byterun.exe -v test*.bc > /dev/null + rm test*.bc + echo "done" +done + +rm test.bc +rm *.o + diff --git a/byterun/src/analyzer.cpp b/byterun/src/analyzer.cpp index 31da48c8a..2f86801e3 100644 --- a/byterun/src/analyzer.cpp +++ b/byterun/src/analyzer.cpp @@ -11,8 +11,7 @@ extern "C" { void analyze(Bytefile *bf) { static constexpr const int NOT_VISITED = -1; - std::vector visited(bf->code_size, NOT_VISITED); // store stack depth - std::vector control_flow_in(bf->code_size, false); // store + std::vector visited(bf->code_size, NOT_VISITED); // store stack depth std::vector to_visit_func; std::vector to_visit_jmp; @@ -23,6 +22,7 @@ void analyze(Bytefile *bf) { uint current_args_count = 0; bool is_in_closure = false; uint16_t *current_begin_counter = nullptr; + int func_end_found = 0; char *ip = bf->code_ptr; char *current_ip = ip; @@ -44,21 +44,12 @@ void analyze(Bytefile *bf) { ¤t_stack_depth, &to_visit_func](size_t offset) { if (visited[offset] == NOT_VISITED) { + visited[offset] = 0; to_visit_func.push_back(offset); + } else if (visited[offset] != 0) { + ip_failure(saved_current_ip, bf, + "different stack depth on same point is not allowed"); } - visited[offset] = 0; - }; - - auto const jmp_control_push = [&jmp_to_visit_push, - &control_flow_in](size_t offset) { - control_flow_in[offset] = true; - jmp_to_visit_push(offset); - }; - - auto const func_control_push = [&func_to_visit_push, - &control_flow_in](size_t offset) { - control_flow_in[offset] = true; - func_to_visit_push(offset); }; auto const check_correct_var = [&saved_current_ip, &bf, &globals_count, @@ -97,7 +88,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_safe(bf, i)); + func_to_visit_push(get_public_offset_safe(bf, i)); } if (to_visit_func.size() == 0) { @@ -113,9 +104,13 @@ void analyze(Bytefile *bf) { ip += to_visit_func.back(); to_visit_func.pop_back(); current_stack_depth = 0; + func_end_found = 0; } else { if (to_visit_jmp.empty()) { current_begin_counter = nullptr; + if (func_end_found != 1) { + failure("each function should have exactly one end"); + } continue; } ip += to_visit_jmp.back(); @@ -133,11 +128,11 @@ void analyze(Bytefile *bf) { current_ip = ip; saved_current_ip = current_ip; -#ifdef DEBUG_VERSION + // #ifdef DEBUG_VERSION const auto [cmd, l] = parse_command(&ip, bf, std::cout); -#else - const auto [cmd, l] = parse_command(&ip, bf); -#endif + // #else + // const auto [cmd, l] = parse_command(&ip, bf); + // #endif if (current_begin_counter == nullptr && cmd != Cmd::BEGIN && cmd != Cmd::CBEGIN) { @@ -149,9 +144,9 @@ void analyze(Bytefile *bf) { } current_stack_depth = visited[current_ip - bf->code_ptr]; -#ifdef DEBUG_VERSION + // #ifdef DEBUG_VERSION std::cout << " -- [" << current_stack_depth << ']' << '\n'; -#endif + // #endif ++current_ip; // skip command byte @@ -196,6 +191,7 @@ void analyze(Bytefile *bf) { case Cmd::JMP: break; case Cmd::END: + ++func_end_found; --current_stack_depth; break; case Cmd::RET: @@ -205,6 +201,9 @@ void analyze(Bytefile *bf) { --current_stack_depth; break; case Cmd::DUP: + if (current_stack_depth < 1) { + ip_failure(saved_current_ip, bf, "not enough elements in stack"); + } ++current_stack_depth; break; case Cmd::SWAP: @@ -263,13 +262,14 @@ void analyze(Bytefile *bf) { } ++current_stack_depth; - if (closure_offset >= bf->code_size) { - ip_failure(saved_current_ip, bf, "jump/call out of file"); - } + // 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"); - } + // NOTE: is not always true + // 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_unsafe(¤t_ip); @@ -386,9 +386,9 @@ void analyze(Bytefile *bf) { ip_failure(saved_current_ip, bf, "jump/call out of file"); } if (is_call) { - func_control_push(jmp_p); + func_to_visit_push(jmp_p); } else { - jmp_control_push(jmp_p); + jmp_to_visit_push(jmp_p); } break; }