From 6ea02e2f75422d67548836670082daa8e8129102 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Tue, 19 Oct 2021 18:30:39 +0200 Subject: Change environments to use darray.h --- src/bootstrap/environment.c | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) (limited to 'src/bootstrap/environment.c') diff --git a/src/bootstrap/environment.c b/src/bootstrap/environment.c index 3fe8be1..cb9e2f0 100644 --- a/src/bootstrap/environment.c +++ b/src/bootstrap/environment.c @@ -7,9 +7,8 @@ env_create(Environment *parent) { Environment *env = alloc_env(); env->parent = parent; env->marked = false; - env->buf = NULL; - env->size = 0; - env->cap = ENV_BUF_CAP; + env->entries = NULL; + array_init(env->entries, ENV_BUF_CAP); return env; } @@ -24,22 +23,15 @@ env_add_symbol(Environment *env, Object *symbol, Object *value) { }); return; } - if (env->buf == NULL) { - env->size = 0; - env->cap = ENV_BUF_CAP; - env->buf = malloc(env->cap * sizeof(EnvEntry)); - } else if (env->size == env->cap) { - env->cap *= 2; - env->buf = realloc(env->buf, env->cap * sizeof(EnvEntry)); - } - env->buf[env->size++] = (EnvEntry){symbol, value}; + EnvEntry entry = (EnvEntry){symbol, value}; + array_push(env->entries, entry); } Object * env_lookup(Environment *env, Object *symbol) { while (env != NULL) { - for (size_t i = 0; i < env->size; i++) { - EnvEntry entry = env->buf[i]; + for (size_t i = 0; i < array_size(env->entries); i++) { + EnvEntry entry = env->entries[i]; if (obj_eq(symbol, entry.symbol)) { return entry.value; } @@ -52,10 +44,10 @@ env_lookup(Environment *env, Object *symbol) { Object * env_update(Environment *env, Object *symbol, Object *value) { while (env != NULL) { - for (size_t i = 0; i < env->size; i++) { - EnvEntry entry = env->buf[i]; + for (size_t i = 0; i < array_size(env->entries); i++) { + EnvEntry entry = env->entries[i]; if (obj_eq(symbol, entry.symbol)) { - env->buf[i].value = value; + env->entries[i].value = value; return obj_nil; } } @@ -70,8 +62,8 @@ env_update(Environment *env, Object *symbol, Object *value) { ssize_t env_index_current(Environment *env, Object *symbol) { - for (size_t i = 0; i < env->size; i++) { - EnvEntry entry = env->buf[i]; + for (size_t i = 0; i < array_size(env->entries); i++) { + EnvEntry entry = env->entries[i]; if (obj_eq(symbol, entry.symbol)) { return i; } @@ -85,15 +77,15 @@ env_add_or_update_current(Environment *env, Object *symbol, Object *value) { if (index == -1) { env_add_symbol(env, symbol, value); } else { - env->buf[index].value = value; + env->entries[index].value = value; } } Environment * env_extend(Environment *parent, Environment *extra) { Environment *env = parent; - for (size_t i = 0; i < extra->size; i++) { - EnvEntry entry = extra->buf[i]; + for (size_t i = 0; i < array_size(extra->entries); i++) { + EnvEntry entry = extra->entries[i]; Environment *tmp = env; bool found = false; while (tmp != NULL) { -- cgit v1.2.1