thesis-lisp/vm/unit.c

31 lines
685 B
C

#include <stdlib.h>
#include "vmval.h"
#include "unit.h"
struct vm_ref_entry *unit_add_ref(struct vm_unit *u) {
return vector_append(&u->ref_table);
}
struct vm_func_entry *unit_add_function(struct vm_unit *u) {
return vector_append(&u->functions);
}
void unit_free(struct vm_unit *u) {
struct vm_func_entry *func;
vector_free(&u->ref_table);
for (size_t i = 0; i < u->functions.size; ++i) {
func = vector_ref(&u->functions, i);
free(func->bytecode);
}
vector_free(&u->functions);
for (size_t i = 0; i < u->global_pool_size; ++i) {
vm_unref(u->global_pool[i]);
}
free(u->global_pool);
u->global_pool = NULL;
}