#ifndef CREOLE_H #define CREOLE_H #include #include #ifndef CREOLE_WORD # define CREOLE_WORD unsigned int # define CREOLE_WORD_MAX UINT_MAX #endif #define CREOLE_MAX_ARG 3 typedef CREOLE_WORD creole_word; enum creole_opcode { CREOLE_NOOP = 0, CREOLE_PUSH = 1, CREOLE_POP = 2, CREOLE_ADD = 3, CREOLE_MUL = 4, CREOLE_DIV = 5, CREOLE_JL = 6, CREOLE_CLB = 7, CREOLE_SYS = 8, CREOLE_OPCODE_LEN }; enum creole_word_flag { CREOLE_IMMEDIATE, CREOLE_REGISTER, CREOLE_WORD_FLAGS_LEN }; enum creole_compiler_ret { CREOLE_COMPILE_OK, CREOLE_COMPILE_PARSE_ERROR, CREOLE_LABEL_OVERFLOW, CREOLE_TYPE_ERROR, CREOLE_COMPILE_RET_LEN }; struct creole_ins { enum creole_opcode opcode; unsigned char w_flags[3]; creole_word w[3]; }; struct creole_env { 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; }; #endif /* CREOLE_H */