summaryrefslogtreecommitdiff
path: root/src/fspec/bcode.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/fspec/bcode.h')
-rw-r--r--src/fspec/bcode.h110
1 files changed, 69 insertions, 41 deletions
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 <fspec/memory.h>
-
#include <inttypes.h>
#include <stdint.h>
#include <stdbool.h>
@@ -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