diff --git a/lib/heap.h b/lib/heap.h index a19ae6e..4d3d732 100644 --- a/lib/heap.h +++ b/lib/heap.h @@ -72,6 +72,8 @@ typedef struct darr_t page_vec; } heap_t; +#define HEAP_SIZE(HEAP) ((HEAP).page_vec.used / sizeof(page_t *)) + /** @brief Instantiate a new heap structure diff --git a/vm/main.c b/vm/main.c index 31404cb..eb3a101 100644 --- a/vm/main.c +++ b/vm/main.c @@ -10,14 +10,10 @@ * Description: Entrypoint to program */ -#include #include -#include -#include - -#include "./runtime.h" -#include "./struct.h" +#include +#include void usage(const char *program_name, FILE *out) { diff --git a/vm/runtime.c b/vm/runtime.c index 77a0376..bf273ba 100644 --- a/vm/runtime.c +++ b/vm/runtime.c @@ -14,6 +14,10 @@ #include #include +#if VERBOSE >= 2 +#include +#endif + #include "./runtime.h" const char *err_as_cstr(err_t err) @@ -286,10 +290,10 @@ err_t vm_execute_all(vm_t *vm) "----------\n", stdout); } - if (prev_pages != vm->heap.pages) + if (prev_pages != HEAP_SIZE(vm->heap)) { vm_print_heap(vm, stdout); - prev_pages = vm->heap.pages; + prev_pages = HEAP_SIZE(vm->heap); fputs("------------------------------------------------------------------" "----" "----------\n", diff --git a/vm/struct.c b/vm/struct.c index 12c96db..51daae2 100644 --- a/vm/struct.c +++ b/vm/struct.c @@ -65,21 +65,21 @@ void vm_stop(vm_t *vm) printf("\n"); } } - if (vm->heap.pages > 0) + if (HEAP_SIZE(vm->heap) > 0) { - leaks = true; - page_t *cur = vm->heap.beg; - size_t capacities[vm->heap.pages], total_capacity = 0; - for (size_t i = 0; i < vm->heap.pages; ++i) + const size_t size_pages = HEAP_SIZE(vm->heap); + leaks = true; + size_t capacities[size_pages], total_capacity = 0; + for (size_t i = 0; i < size_pages; ++i) { + page_t *cur = DARR_AT(page_t *, vm->heap.page_vec.data, i); capacities[i] = cur->available; total_capacity += capacities[i]; } printf("\t[" TERM_RED "DATA" TERM_RESET "]: Heap: %luB (over %lu %s) not reclaimed\n", - total_capacity, vm->heap.pages, - vm->heap.pages == 1 ? "page" : "pages"); - for (size_t i = 0; i < vm->heap.pages; i++) + total_capacity, size_pages, size_pages == 1 ? "page" : "pages"); + for (size_t i = 0; i < size_pages; i++) printf("\t\t[%lu]: %luB lost\n", i, capacities[i]); } if (vm->stack.ptr > 0)