diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2019-04-16 01:53:16 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2019-04-16 01:53:16 -0700 |
commit | a46ef5d5b56f0ca6f69a36ddf131bc3b9658b758 (patch) | |
tree | 5ec107a2a0b96d2a4be447ea0b1923aa8eba10bc /glob.h | |
parent | fc710c7dcc06df67a862109a07d5a30c3c7b8482 (diff) | |
download | txr-a46ef5d5b56f0ca6f69a36ddf131bc3b9658b758.tar.gz txr-a46ef5d5b56f0ca6f69a36ddf131bc3b9658b758.tar.bz2 txr-a46ef5d5b56f0ca6f69a36ddf131bc3b9658b758.zip |
compiler: frame level mismatch bug.
Repro test case:
(defvar v)
(defun f (: (v v)))
(call (compile 'f)) ;; blows up
* share/txr/stdlib/compiler.tl (compiler comp-lambda): The
specials variable is wrongly used as a Boolean to decide
whether we need an extra environment level for specials.
The problem occurs when all of the specials are optional
parameters. Optionals are handled specially and removed from
the specials list. If all the specials are optional
parameters, then the special list becomes empty. This cannot
be intepreted as "there are no specials". The correct Boolean
which indicates "there are specials" is need-dframe.
Diffstat (limited to 'glob.h')
0 files changed, 0 insertions, 0 deletions