pocketlang/src/vm.c

35 lines
830 B
C
Raw Normal View History

2021-02-07 15:40:00 +08:00
/*
* Copyright (c) 2021 Thakee Nathees
* Licensed under: MIT License
*/
#include "vm.h"
2021-02-08 02:30:29 +08:00
void* vmRealloc(MSVM* self, void* memory, size_t old_size, size_t new_size) {
2021-02-07 15:40:00 +08:00
// Track the total allocated memory of the VM to trigger the GC.
self->bytes_allocated += new_size - old_size;
// TODO: If vm->bytes_allocated > some_value -> GC();
if (new_size == 0) {
free(memory);
return NULL;
}
return realloc(memory, new_size);
}
2021-02-08 02:30:29 +08:00
void vmPushTempRef(MSVM* self, Object* obj) {
2021-02-07 15:40:00 +08:00
ASSERT(obj != NULL, "Cannot reference to NULL.");
if (self->temp_reference_count < MAX_TEMP_REFERENCE,
"Too many temp references");
self->temp_reference[self->temp_reference_count++] = obj;
}
2021-02-08 02:30:29 +08:00
void vmPopTempRef(MSVM* self) {
2021-02-07 15:40:00 +08:00
ASSERT(self->temp_reference_count > 0, "Temporary reference is empty to pop.");
self->temp_reference_count--;
}