diff --git a/lib/eval.c b/lib/eval.c index eda6b02..886aca3 100644 --- a/lib/eval.c +++ b/lib/eval.c @@ -24,7 +24,9 @@ static void eval_list(am_t *am) am_cdr(am, UNEV, EXPR); am_car(am, EXPR, EXPR); - am_push(am, EXPR); + env_fetch(am); + am_push(am, VAL); + while (!AM_UNEV(am)->is_atom) { am_push(am, ARGL); am_car(am, EXPR, UNEV); @@ -37,9 +39,8 @@ static void eval_list(am_t *am) am_pop(am, ARGL); am_append(am, ARGL, VAL); } - am_pop(am, EXPR); - env_fetch(am); + am_pop(am, VAL); am_call(am, VAL); }