diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2018-03-29 06:17:17 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2018-03-29 06:17:17 -0700 |
commit | ca6199a0a48cba367ebc81e6d463c4e0a170f9c5 (patch) | |
tree | 9fa27a593d96121c6cc26eda15a39d87a92d44be /win | |
parent | ff3da7279363941f489e210983141f55bf2c9079 (diff) | |
download | txr-ca6199a0a48cba367ebc81e6d463c4e0a170f9c5.tar.gz txr-ca6199a0a48cba367ebc81e6d463c4e0a170f9c5.tar.bz2 txr-ca6199a0a48cba367ebc81e6d463c4e0a170f9c5.zip |
eval: bugs/regressions in handling nil in param expansion.
Due to a number of changes since December 2016, we have two
problems in the evaluator: (lambda (nil)) is accepted rather
than complaining that nil is not bindable; and
(tree-bind (()) '(3)) silently proceeds rather than
diagnosing that the atom 3 doesn't match the empty pattern ().
* eval.c (expand_opt_params_rec, expand_params_rec): When not
expandin macro-style params, check for a parameter not being
bindable, and also avoid recursion entirely when not doing
macro style.
(bind_macro_params): Don't assume that an atom parameter is
a variable, but rather tha a non-list parameter is
a variable. Otherwise we bind nil rather than treating it
as an empty sub-pattern. Before the December 2016 change
(744340ab), we were checking bindablep here; the idea was to
hoist the detailed checking to expansion time. But then the
pattern versus variable distinction was bungled here.
Diffstat (limited to 'win')
0 files changed, 0 insertions, 0 deletions