diff options
author | Bad Diode <bd@badd10de.dev> | 2021-10-13 20:46:26 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-10-13 20:46:26 +0200 |
commit | d38ae947933fe26773a810d91fba3b23766d4d92 (patch) | |
tree | 036d3b100c19210d5e742c7a3334ca83833e209a /src/bootstrap/environment.c | |
parent | 3ed2c60da6ef2e18d7e273cf39056833c5b41c13 (diff) | |
download | bdl-d38ae947933fe26773a810d91fba3b23766d4d92.tar.gz bdl-d38ae947933fe26773a810d91fba3b23766d4d92.zip |
Add set! and eval procedures
Diffstat (limited to 'src/bootstrap/environment.c')
-rw-r--r-- | src/bootstrap/environment.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/src/bootstrap/environment.c b/src/bootstrap/environment.c index d4e9f86..99dd7fd 100644 --- a/src/bootstrap/environment.c +++ b/src/bootstrap/environment.c | |||
@@ -60,18 +60,13 @@ env_lookup(Environment *env, Object *symbol) { | |||
60 | return obj_err; | 60 | return obj_err; |
61 | } | 61 | } |
62 | 62 | ||
63 | void | 63 | ssize_t |
64 | env_update_symbol(Environment *env, Object *symbol, Object *value) { | 64 | env_symbol_index_in_current_env(Environment *env, Object *symbol) { |
65 | // Try to find an existing symbol in the current environment. | ||
66 | for (size_t i = 0; i < env->size; i++) { | 65 | for (size_t i = 0; i < env->size; i++) { |
67 | EnvEntry entry = env->buf[i]; | 66 | EnvEntry entry = env->buf[i]; |
68 | if (obj_eq(symbol, entry.symbol)) { | 67 | if (obj_eq(symbol, entry.symbol)) { |
69 | env->buf[i].value = value; | 68 | return i; |
70 | return; | ||
71 | } | 69 | } |
72 | } | 70 | } |
73 | // If we don't find the symbol, add a new entry. | 71 | return -1; |
74 | env_add_symbol(env, symbol, value); | ||
75 | } | 72 | } |
76 | |||
77 | // TODO: Free env function. | ||