#ifndef _vm_h #define _vm_h #include #include #include typedef struct _thread Thread; #include "val.h" #include "com.h" typedef struct { size_t ip; Chunk *ch; size_t fp; } StackFrame; #define MAXDEPTH 64 #define STACKSIZE 256*MAXDEPTH typedef struct _thread { Chunk *ch; size_t ip; Val stack[STACKSIZE]; size_t fp; size_t sp; StackFrame rstack[MAXDEPTH]; size_t rsp; } Thread; Thread thread_new(State *S); typedef enum { OP_RET, OP_LOADK, OP_ADD, OP_SUB, OP_MUL, OP_DIV, OP_MOD, OP_EQU, OP_CMP, OP_HALT, OP_DROP, OP_GETGLOBAL, OP_SETGLOBAL, OP_GETLOCAL, OP_SETLOCAL, OP_TRUE, OP_FALSE, OP_NIL, OP_0BRANCH, OP_SKIP, OP_REDO, OP_CALL, OP_TAILCALL, OP_ENDSCOPE, OP_ARRNEW, OP_ARRAPPEND, OP_ARRLEN, OP_SETIDX, } Op; int runvm(State *S); #endif