aboutsummaryrefslogtreecommitdiff
path: root/c/env.c
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-12-18 20:33:49 -0600
committerJoel Martin <github@martintribe.org>2015-01-09 16:16:50 -0600
commitb8ee29b22fbaa7a01f2754b4d6dd9af52e02017c (patch)
treef4d977ed220e9a3f665cfbf4f68770a81e4c2095 /c/env.c
parentaaba249304b184e12e2445ab22d66df1f39a51a5 (diff)
downloadmal-b8ee29b22fbaa7a01f2754b4d6dd9af52e02017c.tar.gz
mal-b8ee29b22fbaa7a01f2754b4d6dd9af52e02017c.zip
All: add keywords.
Also, fix nth and count to match cloure.
Diffstat (limited to 'c/env.c')
-rw-r--r--c/env.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/c/env.c b/c/env.c
index d4b8f32..0114d1e 100644
--- a/c/env.c
+++ b/c/env.c
@@ -25,10 +25,10 @@ Env *new_env(Env *outer, MalVal* binds, MalVal *exprs) {
if (i > exprs_len) { break; }
if (_nth(binds, i)->val.string[0] == '&') {
varargs = 1;
- env_set(e, _nth(binds, i+1)->val.string, _slice(exprs, i, _count(exprs)));
+ env_set(e, _nth(binds, i+1), _slice(exprs, i, _count(exprs)));
break;
} else {
- env_set(e, _nth(binds, i)->val.string, _nth(exprs, i));
+ env_set(e, _nth(binds, i), _nth(exprs, i));
}
}
assert(varargs || (binds_len == exprs_len),
@@ -39,8 +39,8 @@ Env *new_env(Env *outer, MalVal* binds, MalVal *exprs) {
return e;
}
-Env *env_find(Env *env, char *key) {
- void *val = g_hash_table_lookup(env->table, key);
+Env *env_find(Env *env, MalVal *key) {
+ void *val = g_hash_table_lookup(env->table, key->val.string);
if (val) {
return env;
} else if (env->outer) {
@@ -50,13 +50,13 @@ Env *env_find(Env *env, char *key) {
}
}
-MalVal *env_get(Env *env, char *key) {
+MalVal *env_get(Env *env, MalVal *key) {
Env *e = env_find(env, key);
- assert(e, "'%s' not found", key);
- return g_hash_table_lookup(e->table, key);
+ assert(e, "'%s' not found", key->val.string);
+ return g_hash_table_lookup(e->table, key->val.string);
}
-Env *env_set(Env *env, char *key, MalVal *val) {
- g_hash_table_insert(env->table, key, val);
+Env *env_set(Env *env, MalVal *key, MalVal *val) {
+ g_hash_table_insert(env->table, key->val.string, val);
return env;
}