aboutsummaryrefslogtreecommitdiffstats
path: root/src/bootstrap/gc.c
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-10-21 18:23:18 +0200
committerBad Diode <bd@badd10de.dev>2021-10-21 18:23:18 +0200
commit2625019add3d16d3ee5d210bcebdd999d3b0cc32 (patch)
tree5c53af4f92ed4e924d4817cccfd834e81354c150 /src/bootstrap/gc.c
parent61f617fe39f891f3dfc5b4815e20ef70a0497a64 (diff)
downloadbdl-0.7.tar.gz
bdl-0.7.zip
Change environments to be a hash tablev0.7
Diffstat (limited to 'src/bootstrap/gc.c')
-rw-r--r--src/bootstrap/gc.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/bootstrap/gc.c b/src/bootstrap/gc.c
index a188279..358a07e 100644
--- a/src/bootstrap/gc.c
+++ b/src/bootstrap/gc.c
@@ -63,10 +63,12 @@ mark_environment(Environment *env) {
63 return; 63 return;
64 } 64 }
65 env->marked = true; 65 env->marked = true;
66 for (size_t i = 0; i < array_size(env->entries); i++) { 66 HashTablePair *pairs = env->table->pairs;
67 EnvEntry *entry = &env->entries[i]; 67 for (size_t i = 0; i < array_cap(pairs); i++) {
68 mark_obj(entry->symbol); 68 if (pairs[i].key != NULL) {
69 mark_obj(entry->value); 69 mark_obj(pairs[i].key);
70 mark_obj(pairs[i].value);
71 }
70 } 72 }
71} 73}
72 74
@@ -120,7 +122,7 @@ mark_and_sweep(void) {
120 for (size_t i = 0; i < array_cap(gc.envs); i++) { 122 for (size_t i = 0; i < array_cap(gc.envs); i++) {
121 Environment *env = &gc.envs[i]; 123 Environment *env = &gc.envs[i];
122 if (!env->marked) { 124 if (!env->marked) {
123 array_free(env->entries); 125 ht_free(env->table);
124 gc.free_envs.offsets[array_head(gc.free_envs.offsets)->size++] = i; 126 gc.free_envs.offsets[array_head(gc.free_envs.offsets)->size++] = i;
125 } 127 }
126 env->marked = false; 128 env->marked = false;