43 lines
750 B
C
43 lines
750 B
C
enum {
|
|
ASS_INT = 1, // =
|
|
MIN_INT = 2, // -
|
|
ADD_INT = 3, // +
|
|
MUL_INT = 4, // *
|
|
DIV_INT = 5, // /
|
|
|
|
EQ_INT = 20, // ==
|
|
LT_INT = 21, // <
|
|
LE_INT = 22, // <=
|
|
GT_INT = 23, // >
|
|
GE_INT = 24, // >=
|
|
|
|
JUMP = 100,
|
|
RETURN = 101,
|
|
};
|
|
|
|
struct vm_Machine {
|
|
struct vm_Stack *stack; // global memory
|
|
struct vm_Function *func; // global functions
|
|
};
|
|
|
|
struct vm_Stack {
|
|
char *memory;
|
|
int bytes;
|
|
};
|
|
|
|
struct vm_Function {
|
|
struct vm_Stack p_stack; // parameter storage
|
|
struct vm_Stack v_stack; // "static" storage - i.e., explicitly defined numbers
|
|
struct vm_Stack stack; //
|
|
struct vm_Operation *ops; // array of ops
|
|
int op_size;
|
|
};
|
|
|
|
struct vm_Operation {
|
|
int op;
|
|
char *stack_a;
|
|
int pos_a;
|
|
char *stack_b;
|
|
int pos_b;
|
|
};
|