From 4750be2da326297830691c54adbab0a5dea14802 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Fri, 23 Feb 2018 12:54:43 +0200 Subject: wip --- src/fspec/bcode.h | 110 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 69 insertions(+), 41 deletions(-) (limited to 'src/fspec/bcode.h') diff --git a/src/fspec/bcode.h b/src/fspec/bcode.h index d84060e..3d216af 100644 --- a/src/fspec/bcode.h +++ b/src/fspec/bcode.h @@ -1,7 +1,5 @@ #pragma once -#include - #include #include #include @@ -10,34 +8,6 @@ #define PRI_FSPEC_NUM PRIu64 typedef uint64_t fspec_num; -enum fspec_arg { - FSPEC_ARG_DAT, - FSPEC_ARG_OFF, - FSPEC_ARG_NUM, - FSPEC_ARG_VAR, - FSPEC_ARG_STR, - FSPEC_ARG_EOF, - FSPEC_ARG_LAST, -} __attribute__((packed)); - -void -fspec_arg_get_mem(const enum fspec_arg *arg, const void *data, struct fspec_mem *out_mem); - -fspec_num -fspec_arg_get_num(const enum fspec_arg *arg); - -const char* -fspec_arg_get_cstr(const enum fspec_arg *arg, const void *data); - -const enum fspec_arg* -fspec_arg_next(const enum fspec_arg *arg, const void *end, const uint8_t nth, const uint32_t expect); - -enum fspec_declaration { - FSPEC_DECLARATION_STRUCT, - FSPEC_DECLARATION_MEMBER, - FSPEC_DECLARATION_LAST, -} __attribute__((packed)); - enum fspec_visual { FSPEC_VISUAL_NUL, FSPEC_VISUAL_DEC, @@ -46,19 +16,77 @@ enum fspec_visual { FSPEC_VISUAL_LAST, } __attribute__((packed)); +enum fspec_type { + FSPEC_TYPE_CODE, + FSPEC_TYPE_CALL, + FSPEC_TYPE_U8, + FSPEC_TYPE_S8, + FSPEC_TYPE_U16, + FSPEC_TYPE_S16, + FSPEC_TYPE_U32, + FSPEC_TYPE_S32, + FSPEC_TYPE_U64, + FSPEC_TYPE_S64, + FSPEC_TYPE_LAST, +} __attribute__((packed)); + +enum fspec_storage { + FSPEC_STORAGE_DATA, + FSPEC_STORAGE_LOCAL, + FSPEC_STORAGE_LAST, +} __attribute__((packed)); + +enum fspec_builtin { + FSPEC_BUILTIN_ADD, + FSPEC_BUILTIN_SUB, + FSPEC_BUILTIN_MUL, + FSPEC_BUILTIN_DIV, + FSPEC_BUILTIN_MOD, + FSPEC_BUILTIN_BIT_AND, + FSPEC_BUILTIN_BIT_OR, + FSPEC_BUILTIN_BIT_XOR, + FSPEC_BUILTIN_BIT_LEFT, + FSPEC_BUILTIN_BIT_RIGHT, + FSPEC_BUILTIN_DECLARE, + FSPEC_BUILTIN_READ, + FSPEC_BUILTIN_FILTER, + FSPEC_BUILTIN_VISUAL, + FSPEC_BUILTIN_LAST, +} __attribute__((packed)); + enum fspec_op { - FSPEC_OP_ARG, - FSPEC_OP_HEADER, - FSPEC_OP_DECLARATION, - FSPEC_OP_READ, - FSPEC_OP_GOTO, - FSPEC_OP_FILTER, - FSPEC_OP_VISUAL, + FSPEC_OP_BUILTIN, + FSPEC_OP_PUSH, + FSPEC_OP_POP, + FSPEC_OP_VAR, FSPEC_OP_LAST, } __attribute__((packed)); -const enum fspec_op* -fspec_op_next(const enum fspec_op *op, const void *end, const bool skip_args); +struct fspec_bcode { + char op, data[]; +} __attribute__((packed)); + +#if 0 +('fspc')(version) +OP_BUILTIN (declare) OP_PUSH OP_VAR8 (storage) OP_VAR8 (type) OP_VAR [name] OP_POP +OP_BUILTIN (filter) +OP_FUN FUN_ASSIGN VAR0 VAR [data] +OP_FUN FUN_READ +#endif -const enum fspec_arg* -fspec_op_get_arg(const enum fspec_op *op, const void *end, const uint8_t nth, const uint32_t expect); +#if 0 +uint8_t +fspec_op_get_num_args(const struct fspec_bcode *code); + +const struct fspec_bcode* +fspec_op_next(const struct fspec_bcode *code, const void *end, const bool skip_args); + +const struct fspec_bcode* +fspec_op_get_arg(const struct fspec_bcode *code, const void *end, const uint8_t nth, const uint32_t expect); + +const struct fspec_arg* +fspec_arg_next(const struct fspec_bcode *code, const void *end, const uint8_t nth, const uint32_t expect); + +fspec_num +fspec_ref_get_num(const struct fspec_bcode *code); +#endif -- cgit v1.2.3