aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-10-19 17:42:11 +0200
committerBad Diode <bd@badd10de.dev>2021-10-19 17:42:11 +0200
commitdc8a1d73ec5d7f9a77923f69fbef790d59ec8ed3 (patch)
tree0110de21dda050bcbf2e048fb8d7f1e5a3e491ca
parent1cc52ef87809811a9792e4dd14f4cb71c3f34201 (diff)
downloadbdl-dc8a1d73ec5d7f9a77923f69fbef790d59ec8ed3.tar.gz
bdl-dc8a1d73ec5d7f9a77923f69fbef790d59ec8ed3.zip
Change gc.objects to use darray.h
-rw-r--r--src/bootstrap/gc.c10
-rw-r--r--src/bootstrap/gc.h1
2 files changed, 5 insertions, 6 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) {
39void 39void
40init_gc(void) { 40init_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);
diff --git a/src/bootstrap/gc.h b/src/bootstrap/gc.h
index 96bdef6..90a1196 100644
--- a/src/bootstrap/gc.h
+++ b/src/bootstrap/gc.h
@@ -15,7 +15,6 @@ typedef struct GC {
15 Object **roots; 15 Object **roots;
16 Environment *envs; 16 Environment *envs;
17 Object *objects; 17 Object *objects;
18 size_t obj_cap;
19 FreeList free_objects; 18 FreeList free_objects;
20 FreeList free_envs; 19 FreeList free_envs;
21 Environment **active_envs; 20 Environment **active_envs;