feat: implement vm #1
@@ -30,9 +30,6 @@ typedef struct
|
|||||||
|
|
||||||
fzl_symtable_t *syms[64];
|
fzl_symtable_t *syms[64];
|
||||||
size_t sym_top;
|
size_t sym_top;
|
||||||
|
|
||||||
size_t bp_table[64];
|
|
||||||
size_t bp_top;
|
|
||||||
} fzl_walker_t;
|
} fzl_walker_t;
|
||||||
|
|
||||||
// Allocate new walker
|
// Allocate new walker
|
||||||
|
|||||||
@@ -13,9 +13,6 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
// TODO: implement backpatching struct for jumping on if/else blocks
|
|
||||||
// TODO: implement conditional binops; conditions
|
|
||||||
|
|
||||||
char wlast_err[256];
|
char wlast_err[256];
|
||||||
|
|
||||||
fzl_walker_t *fzl_mkwalker(fzl_node_t *root)
|
fzl_walker_t *fzl_mkwalker(fzl_node_t *root)
|
||||||
@@ -55,9 +52,6 @@ fzl_walker_t *fzl_mkwalker(fzl_node_t *root)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(walker->bp_table, 0, sizeof(walker->bp_table));
|
|
||||||
walker->bp_top = 0;
|
|
||||||
|
|
||||||
return walker;
|
return walker;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -569,12 +563,6 @@ int fzl_walk(fzl_walker_t *walker)
|
|||||||
fzl_walk_res_t result = walk(walker, walker->root);
|
fzl_walk_res_t result = walk(walker, walker->root);
|
||||||
push_op(walker, FZL_OPCODE_RM_ENVTABLE);
|
push_op(walker, FZL_OPCODE_RM_ENVTABLE);
|
||||||
|
|
||||||
if (walker->bp_top > 0)
|
|
||||||
{
|
|
||||||
snprintf(wlast_err, sizeof(wlast_err), "unfinished conditional block");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result.error && !wlast_err[0])
|
if (result.error && !wlast_err[0])
|
||||||
snprintf(wlast_err, sizeof(wlast_err), "%s", result.error_msg);
|
snprintf(wlast_err, sizeof(wlast_err), "%s", result.error_msg);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user