summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2014-01-23 06:27:05 -0800
committerKaz Kylheku <kaz@kylheku.com>2014-01-23 06:27:05 -0800
commit584838f8c9060fa65ffbee7c7ba4aa8685c46b6f (patch)
tree7b91370fc69e0900248d6d833abb262f9e34c5ab
parenta35aed57a078c841dc36d1fa547fe2e74431597f (diff)
downloadtxr-584838f8c9060fa65ffbee7c7ba4aa8685c46b6f.tar.gz
txr-584838f8c9060fa65ffbee7c7ba4aa8685c46b6f.tar.bz2
txr-584838f8c9060fa65ffbee7c7ba4aa8685c46b6f.zip
* eval.c (do_eval): Fix incorrect, recently introduced code
rearrangement that gives precedence to operator lookup over function lookup.
-rw-r--r--ChangeLog6
-rw-r--r--eval.c20
2 files changed, 16 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index f7047987..7b9b1b53 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2014-01-23 Kaz Kylheku <kaz@kylheku.com>
+ * eval.c (do_eval): Fix incorrect, recently introduced code
+ rearrangement that gives precedence to operator lookup over function
+ lookup.
+
+2014-01-23 Kaz Kylheku <kaz@kylheku.com>
+
Bugfix: @(require ...) not expanding forms.
* eval.c (expand_forms): Static function becomes external.
diff --git a/eval.c b/eval.c
index 3de5e7b8..63c56a62 100644
--- a/eval.c
+++ b/eval.c
@@ -466,19 +466,19 @@ static val do_eval(val form, val env, val ctx_form,
val entry = gethash(op_table, oper);
if (entry) {
- if (!entry) {
+ opfun_t fp = (opfun_t) cptr_get(entry);
+ debug_return (fp(form, env));
+ } else {
+ val fbinding = lookup_fun(env, oper);
+ if (!fbinding) {
eval_error(form, lit("no such function or operator: ~s"), oper, nao);
abort();
- } else {
- opfun_t fp = (opfun_t) cptr_get(entry);
- debug_return (fp(form, env));
+ } else {
+ val args = do_eval_args(rest(form), env, form, lookup);
+ debug_frame(oper, args, nil, env, nil, nil, nil);
+ debug_return (apply(cdr(fbinding), args, form));
+ debug_end;
}
- } else {
- val fbinding = lookup_fun(env, oper);
- val args = do_eval_args(rest(form), env, form, lookup);
- debug_frame(oper, args, nil, env, nil, nil, nil);
- debug_return (apply(cdr(fbinding), args, form));
- debug_end;
}
}
} else {