From 56ddeab2c7d32b2cd8e1e0435d3f006d7985cbe3 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Tue, 19 Oct 2021 17:29:30 +0200 Subject: Change gc.roots to use darray.h --- src/bootstrap/gc.c | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) (limited to 'src/bootstrap/gc.c') diff --git a/src/bootstrap/gc.c b/src/bootstrap/gc.c index 473930a..296ae30 100644 --- a/src/bootstrap/gc.c +++ b/src/bootstrap/gc.c @@ -18,16 +18,12 @@ alloc_env(void) { void push_root(Object *obj) { - if (gc.roots.size == gc.roots.cap) { - gc.roots.cap *= 2; - gc.roots.buf = realloc(gc.roots.buf, gc.roots.cap * sizeof(Object *)); - } - gc.roots.buf[gc.roots.size++] = obj; + array_push(gc.roots, obj); } Object * pop_root(void) { - return gc.roots.buf[gc.roots.size--]; + return array_pop(gc.roots); } void @@ -55,11 +51,6 @@ init_gc(void) { .size = 0, .cap = GC_ENVS_CAP, }, - .roots = (RootNodes){ - .buf = malloc(GC_ROOTS_CAP * sizeof(Object*)), - .size = 0, - .cap = GC_ROOTS_CAP, - }, .free_objects = (FreeList){ .buf = malloc(GC_OBJS_CAP * sizeof(size_t)), .size = GC_OBJS_CAP, @@ -76,6 +67,7 @@ init_gc(void) { .cap = GC_ACTIVE_ENVS_CAP, }, }; + array_init(gc.roots, GC_ROOTS_CAP); // The free list stores the offset from the initial position for all // available slots. @@ -123,8 +115,8 @@ mark_and_sweep(void) { for (size_t i = 0; i < gc.active_envs.size; i++) { mark_environment(gc.active_envs.buf[i]); } - for (size_t i = 0; i < gc.roots.size; i++) { - mark_obj(gc.roots.buf[i]); + for (size_t i = 0; i < array_size(gc.roots); i++) { + mark_obj(gc.roots[i]); } // Reset the free list. @@ -173,8 +165,8 @@ mark_and_sweep(void) { void dump_gc(void) { printf("-------------- ROOTS -------------- \n"); - for (size_t i = 0; i < gc.roots.size; i++) { - display(gc.roots.buf[i]); + for (size_t i = 0; i < array_size(gc.roots); i++) { + display(gc.roots[i]); printf("\n"); } printf("--------- OBJECTS (TOP 20) -------- \n"); @@ -195,8 +187,8 @@ dump_gc(void) { printf("\n"); } printf("-------------- MISC --------------- \n"); - printf("gc.roots.size: %ld\n", gc.roots.size); - printf("gc.roots.cap: %ld\n", gc.roots.cap); + printf("gc.roots.size: %ld\n", array_size(gc.roots)); + printf("gc.roots.cap: %ld\n", array_size(gc.roots)); printf("gc.active_envs.size: %ld\n", gc.active_envs.size); printf("gc.active_envs.cap: %ld\n", gc.active_envs.cap); printf("gc.obj_cap: %ld\n", gc.obj_cap); -- cgit v1.2.1