#ifndef SK_PROG_H #define SK_PROG_H #include "commons.h" #include "value.h" #define SK_NO_PARAM (-1) #define OPCODE(G) \ G(OP_PUSH), \ G(OP_ADD), G(OP_SUB), G(OP_MUL), \ G(OP_DIV), G(OP_MOD), G(OP_POW), \ G(OP_USUB), G(OP_ASSERT_EQ), \ G(OP_NOT), G(OP_AND), G(OP_OR), \ G(OP_BR), G(OP_BRF), G(OP_LT), G(OP_GT), \ G(OP_EQUAL) SK_ENUM_H(Opcode, OPCODE); struct prog { struct vec opcodes; struct vec params; struct vec constants; }; void prog_init(struct prog* self); void prog_free(struct prog* self); size_t prog_add_instr(struct prog* self, Opcode opcode, size_t param); size_t prog_add_constant(struct prog* self, struct value* new_value); #endif