From 2625019add3d16d3ee5d210bcebdd999d3b0cc32 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Thu, 21 Oct 2021 18:23:18 +0200 Subject: Change environments to be a hash table --- src/bootstrap/gc.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'src/bootstrap/gc.c') 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) { return; } env->marked = true; - for (size_t i = 0; i < array_size(env->entries); i++) { - EnvEntry *entry = &env->entries[i]; - mark_obj(entry->symbol); - mark_obj(entry->value); + HashTablePair *pairs = env->table->pairs; + for (size_t i = 0; i < array_cap(pairs); i++) { + if (pairs[i].key != NULL) { + mark_obj(pairs[i].key); + mark_obj(pairs[i].value); + } } } @@ -120,7 +122,7 @@ mark_and_sweep(void) { for (size_t i = 0; i < array_cap(gc.envs); i++) { Environment *env = &gc.envs[i]; if (!env->marked) { - array_free(env->entries); + ht_free(env->table); gc.free_envs.offsets[array_head(gc.free_envs.offsets)->size++] = i; } env->marked = false; -- cgit v1.2.1