aboutsummaryrefslogtreecommitdiffstats
path: root/src/bootstrap/gc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bootstrap/gc.c')
-rw-r--r--src/bootstrap/gc.c11
1 files changed, 3 insertions, 8 deletions
diff --git a/src/bootstrap/gc.c b/src/bootstrap/gc.c
index 48499ac..d281536 100644
--- a/src/bootstrap/gc.c
+++ b/src/bootstrap/gc.c
@@ -75,8 +75,8 @@ mark_environment(Environment *env) {
75 return; 75 return;
76 } 76 }
77 env->marked = true; 77 env->marked = true;
78 for (size_t i = 0; i < env->size; i++) { 78 for (size_t i = 0; i < array_size(env->entries); i++) {
79 EnvEntry *entry = &env->buf[i]; 79 EnvEntry *entry = &env->entries[i];
80 mark_obj(entry->symbol); 80 mark_obj(entry->symbol);
81 mark_obj(entry->value); 81 mark_obj(entry->value);
82 } 82 }
@@ -132,12 +132,7 @@ mark_and_sweep(void) {
132 for (size_t i = 0; i < array_cap(gc.envs); i++) { 132 for (size_t i = 0; i < array_cap(gc.envs); i++) {
133 Environment *env = &gc.envs[i]; 133 Environment *env = &gc.envs[i];
134 if (!env->marked) { 134 if (!env->marked) {
135 if (env->buf != NULL) { 135 array_free(env->entries);
136 free(env->buf);
137 env->buf = NULL;
138 env->size = 0;
139 env->cap = 0;
140 }
141 gc.free_envs.buf[gc.free_envs.size++] = i; 136 gc.free_envs.buf[gc.free_envs.size++] = i;
142 } 137 }
143 env->marked = false; 138 env->marked = false;