summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2018-03-16 20:13:44 -0700
committerKaz Kylheku <kaz@kylheku.com>2018-03-16 20:13:44 -0700
commit95b6588ad3eaaf9a98bee89884e1d8ba35346bf6 (patch)
tree17469de90ac4a85c8a5159efca9c7115743aff90
parent5014419c6458571453317c94f5be744515554196 (diff)
downloadtxr-95b6588ad3eaaf9a98bee89884e1d8ba35346bf6.tar.gz
txr-95b6588ad3eaaf9a98bee89884e1d8ba35346bf6.tar.bz2
txr-95b6588ad3eaaf9a98bee89884e1d8ba35346bf6.zip
compiler: closure bug: (dframe ...) without (end ...).
* share/txr/stdlib/compiler.tl (compiler comp-lambda): When we have specials we must generate an extra (end ...), to terminate the (dframe ...) that we inserted.
-rw-r--r--share/txr/stdlib/compiler.tl2
1 files changed, 2 insertions, 0 deletions
diff --git a/share/txr/stdlib/compiler.tl b/share/txr/stdlib/compiler.tl
index 7842f558..f7ae0bc3 100644
--- a/share/txr/stdlib/compiler.tl
+++ b/share/txr/stdlib/compiler.tl
@@ -319,6 +319,8 @@
(dreg me.(get-dreg special)))
^(bindv ,sub-bind.loc ,dreg)))))
,*bfrag.code
+ ,*(if specials
+ ^((end ,bfrag.oreg)))
(end ,bfrag.oreg)
,lskip)
(uni [reduce-left uni ifrags nil .fvars]