diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2014-01-23 06:27:05 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2014-01-23 06:27:05 -0800 |
commit | 584838f8c9060fa65ffbee7c7ba4aa8685c46b6f (patch) | |
tree | 7b91370fc69e0900248d6d833abb262f9e34c5ab | |
parent | a35aed57a078c841dc36d1fa547fe2e74431597f (diff) | |
download | txr-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-- | ChangeLog | 6 | ||||
-rw-r--r-- | eval.c | 20 |
2 files changed, 16 insertions, 10 deletions
@@ -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. @@ -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 { |