Files
thesis-lisp/vm/unit.c
T
2021-04-07 22:24:33 +03:00

35 lines
767 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;
uint64_t w;
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) {
w = u->global_pool[i];
if (ref_q(w)) {
vm_value_free(getref(w));
}
}
free(u->global_pool);
u->global_pool = NULL;
}