diff options
| author | 2023-02-18 05:55:04 +0000 | |
|---|---|---|
| committer | 2023-02-18 05:55:04 +0000 | |
| commit | 83c568c8dd060a8fb324aee33cdb030809dedbf3 (patch) | |
| tree | 3a0331b5352041d57eda345581754d448e9585e7 /creole.h | |
| parent | add version defines (diff) | |
add data, remove labels and make jumps absolute
Diffstat (limited to '')
| -rw-r--r-- | creole.h | 34 |
1 files changed, 13 insertions, 21 deletions
@@ -41,11 +41,11 @@ enum creole_opcode { CREOLE_MUL, CREOLE_DIV, CREOLE_SYS, - CREOLE_CLB, CREOLE_JL, CREOLE_JLE, CREOLE_JE, CREOLE_JNE, + CREOLE_DB, CREOLE_OPCODE_LEN }; @@ -63,7 +63,7 @@ enum creole_compiler_ret { CREOLE_ARG_MALFORMED, CREOLE_LAST_READ_ERROR, CREOLE_LAST_MALFORMED, - CREOLE_LABEL_OVERFLOW, + CREOLE_DATA_OVERFLOW, CREOLE_TYPE_ERROR, CREOLE_COMPILE_CLEARED_INSTRUCTION, CREOLE_PROGRAM_OVERFLOW, @@ -76,45 +76,37 @@ enum creole_run_ret { CREOLE_STEP_STOP, CREOLE_STACK_OVERFLOW, CREOLE_STACK_UNDERFLOW, - CREOLE_RUN_LABEL_OVERFLOW, + CREOLE_RUN_DECODE_ERROR, CREOLE_REGISTER_OVERFLOW, CREOLE_STEP_UNKNOWN_OPCODE, CREOLE_DIV_BY_ZERO, CREOLE_STEP_HIGH_BIT_MALFORMED, + CREOLE_JUMP_OVERFLOW, CREOLE_RUN_RET_LEN }; -struct creole_ins { - enum creole_opcode opcode; - unsigned char w_flags[3]; - creole_word w[3]; +struct creole_reader { + unsigned char *p; + size_t left; }; struct creole_env { + unsigned char **dats; + size_t datlen; + creole_word *reg; size_t reglen; - size_t *lab; - size_t lablen; - creole_word *stk; size_t stkptr, stklen; - struct creole_ins *prg; - size_t prgptr, prgend, prglen; -}; - -struct creole_reader { - unsigned char *p; - size_t left; + struct creole_reader r_current; + struct creole_reader r_start; }; int creole_encode(creole_word i, unsigned encode_to, unsigned high_bits, unsigned char buf[7]); -enum creole_compiler_ret -creole_parse_line(struct creole_ins *ins, struct creole_reader *r); -enum creole_compiler_ret -creole_compile(struct creole_env *env, struct creole_reader *r); +enum creole_compiler_ret creole_compile(struct creole_env *env); enum creole_run_ret creole_reg_write(struct creole_env *env, unsigned reg, creole_word w); |
