diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2019-09-26 18:05:49 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2019-09-26 18:05:49 -0700 |
commit | ee631bf97c1f1ef76696e803f57dcfd36d6064b9 (patch) | |
tree | 0d6a8ed69b88be8580f4dd2d4259b981320cc13c | |
parent | 3c524ae5ddf314e12351b393cc7ffc62aed78f8a (diff) | |
download | txr-ee631bf97c1f1ef76696e803f57dcfd36d6064b9.tar.gz txr-ee631bf97c1f1ef76696e803f57dcfd36d6064b9.tar.bz2 txr-ee631bf97c1f1ef76696e803f57dcfd36d6064b9.zip |
fun operator: don't cons binding when handling lambda.
* eval.c (op_fun): Don't cons up a fake fbinding when
processing lambda; just return result of func_interp.
Test for null fbinding consolidated, too.
-rw-r--r-- | eval.c | 8 |
1 files changed, 4 insertions, 4 deletions
@@ -1855,11 +1855,11 @@ static val op_fun(val form, val env) val name = second(form); val fbinding = lookup_fun(env, name); - if (!fbinding && consp(name) && car(name) == lambda_s) - fbinding = cons(name, func_interp(env, name)); - - if (!fbinding) + if (!fbinding) { + if (consp(name) && car(name) == lambda_s) + return func_interp(env, name); eval_error(form, lit("no function exists named ~s"), name, nao); + } return cdr(fbinding); } |