diff options
| author | Oskari Timperi <oskari.timperi@iki.fi> | 2014-05-15 22:52:43 +0300 |
|---|---|---|
| committer | Oskari Timperi <oskari.timperi@iki.fi> | 2014-05-15 22:52:43 +0300 |
| commit | 06b32874034251d808394b66bcbdf12afe0f41b4 (patch) | |
| tree | 62711f5e76bbe4d0c311f3c329ca755bc3ed67fd /eval.c | |
| parent | 043cddd93a65930c534f4170ed517bb1f76fd3ae (diff) | |
| download | lispish-06b32874034251d808394b66bcbdf12afe0f41b4.tar.gz lispish-06b32874034251d808394b66bcbdf12afe0f41b4.zip | |
add eval functions that take env as argument (no env support yet)
Diffstat (limited to 'eval.c')
| -rw-r--r-- | eval.c | 20 |
1 files changed, 15 insertions, 5 deletions
@@ -73,10 +73,20 @@ static int atom_cmp(struct list *a, struct list *b) struct list *eval(struct list *list) { - if (!IS_LIST(list)) - return list; + return eval_env(list, NULL); +} + +struct list *eval_str(const char *str) +{ + return eval_str_env(str, NULL); +} + +struct list *eval_env(struct list *expr, struct list *env) +{ + if (!IS_LIST(expr)) + return expr; - struct list *l = LIST_GET_ATOM(list)->list; + struct list *l = LIST_GET_ATOM(expr)->list; if (IS_SYM(l)) { @@ -227,12 +237,12 @@ struct list *eval(struct list *list) return list_append(NULL, &nil_atom); } -struct list *eval_str(const char *str) +struct list *eval_str_env(const char *expr, struct list *env) { struct list *result; int pos = 0; - result = eval(parse(str, &pos)); + result = eval_env(parse(expr, &pos), env); return result; } |
