summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2019-09-26 18:05:49 -0700
committerKaz Kylheku <kaz@kylheku.com>2019-09-26 18:05:49 -0700
commitee631bf97c1f1ef76696e803f57dcfd36d6064b9 (patch)
tree0d6a8ed69b88be8580f4dd2d4259b981320cc13c
parent3c524ae5ddf314e12351b393cc7ffc62aed78f8a (diff)
downloadtxr-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.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/eval.c b/eval.c
index 807abdce..714b86a1 100644
--- a/eval.c
+++ b/eval.c
@@ -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);
}