diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2018-03-13 20:23:18 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2018-03-13 20:23:18 -0700 |
commit | d32527312c4467817eef8527907fccb3cc5ed42a (patch) | |
tree | 81a176256dbb27e6e58ea3038631029dd6b3676f /struct.h | |
parent | f3fddb31b01d7f015d9f35b6c6312fad28177ae4 (diff) | |
download | txr-d32527312c4467817eef8527907fccb3cc5ed42a.tar.gz txr-d32527312c4467817eef8527907fccb3cc5ed42a.tar.bz2 txr-d32527312c4467817eef8527907fccb3cc5ed42a.zip |
expander bug: sequential vars with no init forms.
The test case for this is (let* (a (b a))) which raises
suspicion by diagnosing an "unbound variable a" error against
the (b a) var-init pair. The error goes away if we make it
(let* ((a nil) (b a))), a perfectly equivalent form. The
diagnostic is just a symptom; the problem is that in the case
when a doesn't have an initform, the (b a) var-init pair is
being incorrectly expanded in an environment that hasn't been
extended with the a variable.
* eval.c (expand_vars): In the sequential binding situation
(let*), we must extend the environment for each variable in
the no-init-form case exactly as we do in the with-init-form
case.
Diffstat (limited to 'struct.h')
0 files changed, 0 insertions, 0 deletions