skopy/lib/include/prog.h

41 lines
957 B
C

#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_POP), \
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), G(OP_LOCAL_STORE), G(OP_LOCAL_LOAD), \
G(OP_CALL), G(OP_RET), G(OP_MAKE_REF), \
G(OP_CLOSURE_LOAD), G(OP_CLOSURE_STORE), \
G(OP_GLOBAL_LOAD), G(OP_MODULE_LOAD)
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);
struct prog* prog_new_clone(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