diff options
Diffstat (limited to 'src/bootstrap/gc.c')
-rw-r--r-- | src/bootstrap/gc.c | 11 |
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; |