summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2018-04-08 21:11:28 -0700
committerKaz Kylheku <kaz@kylheku.com>2018-04-08 21:11:28 -0700
commit969afde71c5b4b6e7b6c7228e1dba3281440a0bd (patch)
tree0280fd751d30b99b60dbb5db8b20f16a0c5c66f7
parent362cdf3c0f208e9fb89922216c99da7f62b6f83e (diff)
downloadtxr-969afde71c5b4b6e7b6c7228e1dba3281440a0bd.tar.gz
txr-969afde71c5b4b6e7b6c7228e1dba3281440a0bd.tar.bz2
txr-969afde71c5b4b6e7b6c7228e1dba3281440a0bd.zip
compiler: fix broken prog1.
* share/txr/stdlib/compiler.tl (compiler comp-prog1): The output of the frag should be fireg, not oreg. We need to move into fireg before re-frag.code is executed, because the data source in fi-frag may be clobbered by re-frag.
-rw-r--r--share/txr/stdlib/compiler.tl6
1 files changed, 3 insertions, 3 deletions
diff --git a/share/txr/stdlib/compiler.tl b/share/txr/stdlib/compiler.tl
index bab0d341..2977b865 100644
--- a/share/txr/stdlib/compiler.tl
+++ b/share/txr/stdlib/compiler.tl
@@ -826,10 +826,10 @@
(append re '(nil)))))
me.(maybe-free-treg fireg oreg)
me.(free-treg igreg)
- (new (frag oreg
+ (new (frag fireg
(append fi-frag.code
- re-frag.code
- (maybe-mov oreg fireg))
+ (maybe-mov fireg fi-frag.oreg)
+ re-frag.code)
(uni fi-frag.fvars re-frag.fvars)
(uni fi-frag.ffuns re-frag.ffuns)))))
((prog1 fi) me.(compile oreg env fi))