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
commit7e66f70f11435250cb7038793fe437f749bc16bb (patch)
tree0d6a8ed69b88be8580f4dd2d4259b981320cc13c
parent5f0bc4ab8ee0fcbd7a19e7bfcf1d6065991cfcc9 (diff)
downloadtxr-7e66f70f11435250cb7038793fe437f749bc16bb.tar.gz
txr-7e66f70f11435250cb7038793fe437f749bc16bb.tar.bz2
txr-7e66f70f11435250cb7038793fe437f749bc16bb.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);
}