aboutsummaryrefslogtreecommitdiffstats
path: root/creole.h
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2023-02-18 05:55:04 +0000
committerGravatar Peter McGoron 2023-02-18 05:55:04 +0000
commit83c568c8dd060a8fb324aee33cdb030809dedbf3 (patch)
tree3a0331b5352041d57eda345581754d448e9585e7 /creole.h
parentadd version defines (diff)
add data, remove labels and make jumps absolute
Diffstat (limited to '')
-rw-r--r--creole.h34
1 files changed, 13 insertions, 21 deletions
diff --git a/creole.h b/creole.h
index b3fe29c..53e6ab7 100644
--- a/creole.h
+++ b/creole.h
@@ -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);