diff options
Diffstat (limited to 'src/bootstrap/gc.c')
-rw-r--r-- | src/bootstrap/gc.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/bootstrap/gc.c b/src/bootstrap/gc.c index e091207..a72f718 100644 --- a/src/bootstrap/gc.c +++ b/src/bootstrap/gc.c | |||
@@ -39,8 +39,6 @@ pop_active_env(void) { | |||
39 | void | 39 | void |
40 | init_gc(void) { | 40 | init_gc(void) { |
41 | gc = (GC){ | 41 | gc = (GC){ |
42 | .objects = malloc(GC_OBJS_CAP * sizeof(Object)), | ||
43 | .obj_cap = GC_OBJS_CAP, | ||
44 | .free_objects = (FreeList){ | 42 | .free_objects = (FreeList){ |
45 | .buf = malloc(GC_OBJS_CAP * sizeof(size_t)), | 43 | .buf = malloc(GC_OBJS_CAP * sizeof(size_t)), |
46 | .size = GC_OBJS_CAP, | 44 | .size = GC_OBJS_CAP, |
@@ -51,10 +49,12 @@ init_gc(void) { | |||
51 | .size = GC_ENVS_CAP, | 49 | .size = GC_ENVS_CAP, |
52 | .cap = GC_ENVS_CAP, | 50 | .cap = GC_ENVS_CAP, |
53 | }, | 51 | }, |
52 | .objects = NULL, | ||
54 | .envs = NULL, | 53 | .envs = NULL, |
55 | .roots = NULL, | 54 | .roots = NULL, |
56 | .active_envs = NULL, | 55 | .active_envs = NULL, |
57 | }; | 56 | }; |
57 | array_init(gc.objects, GC_OBJS_CAP); | ||
58 | array_init(gc.roots, GC_ROOTS_CAP); | 58 | array_init(gc.roots, GC_ROOTS_CAP); |
59 | array_init(gc.active_envs, GC_ACTIVE_ENVS_CAP); | 59 | array_init(gc.active_envs, GC_ACTIVE_ENVS_CAP); |
60 | array_init(gc.envs, GC_ENVS_CAP); | 60 | array_init(gc.envs, GC_ENVS_CAP); |
@@ -116,7 +116,7 @@ mark_and_sweep(void) { | |||
116 | gc.free_envs.size = 0; | 116 | gc.free_envs.size = 0; |
117 | 117 | ||
118 | // Sweep. | 118 | // Sweep. |
119 | for (size_t i = 0; i < gc.obj_cap; i++) { | 119 | for (size_t i = 0; i < array_cap(gc.objects); i++) { |
120 | Object *obj = &gc.objects[i]; | 120 | Object *obj = &gc.objects[i]; |
121 | if (!obj->marked) { | 121 | if (!obj->marked) { |
122 | // Free heap allocated memory for this object if needed. | 122 | // Free heap allocated memory for this object if needed. |
@@ -165,7 +165,7 @@ dump_gc(void) { | |||
165 | Object *obj = &gc.objects[i]; | 165 | Object *obj = &gc.objects[i]; |
166 | display(obj); | 166 | display(obj); |
167 | bool is_free = false; | 167 | bool is_free = false; |
168 | for (size_t j = 0; j < gc.obj_cap; j++) { | 168 | for (size_t j = 0; j < array_cap(gc.objects); j++) { |
169 | if (gc.free_objects.buf[j] == i) { | 169 | if (gc.free_objects.buf[j] == i) { |
170 | is_free = true; | 170 | is_free = true; |
171 | break; | 171 | break; |
@@ -181,7 +181,7 @@ dump_gc(void) { | |||
181 | printf("gc.roots.cap: %ld\n", array_size(gc.roots)); | 181 | printf("gc.roots.cap: %ld\n", array_size(gc.roots)); |
182 | printf("gc.active_envs.size: %ld\n", array_size(gc.active_envs)); | 182 | printf("gc.active_envs.size: %ld\n", array_size(gc.active_envs)); |
183 | printf("gc.active_envs.cap: %ld\n", array_cap(gc.active_envs)); | 183 | printf("gc.active_envs.cap: %ld\n", array_cap(gc.active_envs)); |
184 | printf("gc.obj_cap: %ld\n", gc.obj_cap); | 184 | printf("gc.obj_cap: %ld\n", array_cap(gc.objects)); |
185 | printf("gc.free_objects.size: %ld\n", gc.free_objects.size); | 185 | printf("gc.free_objects.size: %ld\n", gc.free_objects.size); |
186 | printf("gc.free_objects.cap: %ld\n", gc.free_objects.cap); | 186 | printf("gc.free_objects.cap: %ld\n", gc.free_objects.cap); |
187 | printf("gc.free_objects.position: %ld\n", gc.free_objects.position); | 187 | printf("gc.free_objects.position: %ld\n", gc.free_objects.position); |