fix: sanitizer checks fix (iteration 2)
This commit is contained in:
@@ -14,11 +14,19 @@ fzl_token_t null_tok = {
|
|||||||
.filename = "",
|
.filename = "",
|
||||||
.ln = 0,
|
.ln = 0,
|
||||||
.cn = 0,
|
.cn = 0,
|
||||||
.store_value = true,
|
.store_value = false,
|
||||||
.value = "null",
|
.value = "null",
|
||||||
.value_sz = 4,
|
.value_sz = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
fzl_token_t this_tok = {.type = FZL_TOKTYPE_NAME,
|
||||||
|
.filename = "",
|
||||||
|
.ln = 0,
|
||||||
|
.cn = 0,
|
||||||
|
.store_value = false,
|
||||||
|
.value = "this",
|
||||||
|
.value_sz = 4};
|
||||||
|
|
||||||
fzl_parser_t *fzl_mkparser(fzl_reader_ll_t *first)
|
fzl_parser_t *fzl_mkparser(fzl_reader_ll_t *first)
|
||||||
{
|
{
|
||||||
if (!first)
|
if (!first)
|
||||||
@@ -725,10 +733,7 @@ fzl_node_t *parse_class(fzl_parser_t *parser)
|
|||||||
memmove(&new_args[1], new_args,
|
memmove(&new_args[1], new_args,
|
||||||
(node->fn.args_count - 1) * sizeof(fzl_node_t *));
|
(node->fn.args_count - 1) * sizeof(fzl_node_t *));
|
||||||
|
|
||||||
fzl_token_t *this_tok =
|
fzl_node_t *this_id = fzl_mknode(FZL_NODETYPE_IDENTIFIER, &this_tok);
|
||||||
fzl_mktoken(FZL_TOKTYPE_NAME, node->fn.name->ln, node->fn.name->cn,
|
|
||||||
"this", 4, node->fn.name->filename);
|
|
||||||
fzl_node_t *this_id = fzl_mknode(FZL_NODETYPE_IDENTIFIER, this_tok);
|
|
||||||
fzl_node_t *this_dec = fzl_mknode(FZL_NODETYPE_DECLARATION, name);
|
fzl_node_t *this_dec = fzl_mknode(FZL_NODETYPE_DECLARATION, name);
|
||||||
this_dec->var.type = name;
|
this_dec->var.type = name;
|
||||||
this_dec->var.identifier = this_id;
|
this_dec->var.identifier = this_id;
|
||||||
@@ -1090,14 +1095,28 @@ void fzl_freeast(fzl_node_t *root)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case FZL_NODETYPE_CALL:
|
case FZL_NODETYPE_CALL:
|
||||||
|
if (root->call.callee)
|
||||||
|
fzl_freeast(root->call.callee);
|
||||||
|
|
||||||
if (root->call.args_count)
|
if (root->call.args_count)
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < root->call.args_count; i++)
|
for (size_t i = 0; i < root->call.args_count; i++)
|
||||||
if (root->call.args[i])
|
if (root->call.args[i])
|
||||||
fzl_freeast(root->call.args[i]);
|
fzl_freeast(root->call.args[i]);
|
||||||
|
|
||||||
free(root->call.args);
|
|
||||||
}
|
}
|
||||||
|
if (root->call.args)
|
||||||
|
free(root->call.args);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FZL_NODETYPE_CONDITIONAL:
|
||||||
|
if (root->cond.condition)
|
||||||
|
fzl_freeast(root->cond.condition);
|
||||||
|
|
||||||
|
if (root->cond.true_block)
|
||||||
|
fzl_freeast(root->cond.true_block);
|
||||||
|
|
||||||
|
if (root->cond.else_block)
|
||||||
|
fzl_freeast(root->cond.else_block);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FZL_NODETYPE_ADD:
|
case FZL_NODETYPE_ADD:
|
||||||
@@ -1106,7 +1125,6 @@ void fzl_freeast(fzl_node_t *root)
|
|||||||
case FZL_NODETYPE_DIV:
|
case FZL_NODETYPE_DIV:
|
||||||
case FZL_NODETYPE_POW:
|
case FZL_NODETYPE_POW:
|
||||||
case FZL_NODETYPE_MOD:
|
case FZL_NODETYPE_MOD:
|
||||||
case FZL_NODETYPE_CONDITIONAL:
|
|
||||||
case FZL_NODETYPE_OR:
|
case FZL_NODETYPE_OR:
|
||||||
case FZL_NODETYPE_AND:
|
case FZL_NODETYPE_AND:
|
||||||
case FZL_NODETYPE_EQUAL:
|
case FZL_NODETYPE_EQUAL:
|
||||||
|
|||||||
+4
-1
@@ -660,7 +660,7 @@ int fzl_vm_run(fzl_vm_t *vm)
|
|||||||
|
|
||||||
case FZL_OPCODE_JMP:
|
case FZL_OPCODE_JMP:
|
||||||
{
|
{
|
||||||
if (vm->ops_count >= vm->ip)
|
if (vm->ops_count <= vm->ip)
|
||||||
{
|
{
|
||||||
snprintf(last_err, sizeof(last_err),
|
snprintf(last_err, sizeof(last_err),
|
||||||
"runtime error - expected JMP addr");
|
"runtime error - expected JMP addr");
|
||||||
@@ -1011,6 +1011,9 @@ void fzl_freevm(fzl_vm_t *vm)
|
|||||||
if (!vm)
|
if (!vm)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
while (vm->etop > 0)
|
||||||
|
fzl_freeenv(vm->estack[--vm->etop]);
|
||||||
|
|
||||||
for (size_t i = 0; i < vm->consts_count; i++)
|
for (size_t i = 0; i < vm->consts_count; i++)
|
||||||
{
|
{
|
||||||
if (vm->consts[i].type == FZL_CONSTTYPE_STRING)
|
if (vm->consts[i].type == FZL_CONSTTYPE_STRING)
|
||||||
|
|||||||
Reference in New Issue
Block a user