wip: working on loop infinity checker

This commit is contained in:
samsonium
2026-10-22 18:25:07 +03:00
parent cc5bbd61f2
commit 5dde75523d
3 changed files with 73 additions and 0 deletions
+12
View File
@@ -14,6 +14,8 @@
#include <stdlib.h>
#include <string.h>
extern bool is_infinite_loop(fzl_walker_t *walker, size_t ls, size_t le);
char *null_name = "<null>";
char wlast_err[256];
@@ -271,6 +273,16 @@ fzl_walk_res_t walk(fzl_walker_t *walker, fzl_node_t *node)
push_word(walker, start_ip);
push_op(walker, FZL_OPCODE_RM_ENVTABLE);
bool is_infinite =
is_infinite_loop(walker, start_ip, walker->op_count - 2);
if (is_infinite)
{
snprintf(wlast_err, sizeof(wlast_err),
"'%s': infinite loop detected at %ld:%ld",
node->token->filename, node->token->ln, node->token->cn);
return (fzl_walk_res_t){.error = true, .error_msg = wlast_err};
}
for (size_t i = walker->sym_top - 1; i > newctx->initial_env_lvl; i--)
fzl_freesymt(walker->syms[--walker->sym_top]);