49 lines
865 B
C
49 lines
865 B
C
#ifndef clox_vm_h
|
|
#define clox_vm_h
|
|
|
|
#include "object.h"
|
|
#include "table.h"
|
|
#include "value.h"
|
|
|
|
#define FRAMES_MAX 64
|
|
#define STACK_MAX (FRAMES_MAX * UINT8_COUNT)
|
|
|
|
typedef struct {
|
|
ObjClosure* closure;
|
|
uint8_t* ip;
|
|
Value* slots;
|
|
} CallFrame;
|
|
|
|
typedef struct {
|
|
CallFrame frames[FRAMES_MAX];
|
|
int frameCount;
|
|
Value stack[STACK_MAX];
|
|
Value* stackTop;
|
|
Table globals;
|
|
Table strings;
|
|
ObjString* initString;
|
|
ObjUpvalue* openUpvalues;
|
|
size_t bytesAllocated;
|
|
size_t nextGC;
|
|
Obj* objects;
|
|
int grayCount;
|
|
int grayCapacity;
|
|
Obj** grayStack;
|
|
} VM;
|
|
|
|
typedef enum {
|
|
INTERPRET_OK,
|
|
INTERPRET_COMPILE_ERROR,
|
|
INTERPRET_RUNTIME_ERROR,
|
|
} InterpretResult;
|
|
|
|
extern VM vm;
|
|
|
|
void initVM();
|
|
void freeVM();
|
|
InterpretResult interpret(const char* source);
|
|
void push(Value value);
|
|
Value pop();
|
|
|
|
#endif // clox_vm_h
|
|
|