marCsweep/include/vm.h
2024-09-06 11:05:16 -04:00

59 lines
1.2 KiB
C

#ifndef VM_H
#define VM_H
#define STACK_MAX 1024
#define GC_THRESHOLD 256
// Primitive types for garbage collection
enum garbageData {
GARBAGE_INT,
GARBAGE_PAIR,
};
// Holds type and value data for the virtual machine
struct garbageObject {
enum garbageData type;
struct garbageObject *next;
unsigned char mark;
union {
int value;
struct {
struct garbageObject *head;
struct garbageObject *tail;
};
};
};
// Virtual machine hold the stack to trace references
struct virtualMachine {
int stackSize;
unsigned refCount;
unsigned refMax;
struct garbageObject *head;
struct garbageObject *stack[STACK_MAX];
};
// Create a new garbageObject
struct garbageObject *initGarbage(struct virtualMachine *vm,
enum garbageData type);
// Create a new VM
struct virtualMachine *initVM(void);
void deinitVM(struct virtualMachine *vm);
// Generic function to push data onto the VM stack
void push(struct virtualMachine *vm, struct garbageObject *value);
// Pop data from the VM stack
struct garbageObject *pop(struct virtualMachine *vm);
// Push a GARBAGE_INT onto the VM stack
void pushInt(struct virtualMachine *vm, int value);
// Push a GARBAGE_PAIR onto the VM stack
struct garbageObject *pushPair(struct virtualMachine *vm);
#endif /* VM_H */