diff options
-rw-r--r-- | stdlib/compiler.tl | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/stdlib/compiler.tl b/stdlib/compiler.tl index 002ef24d..fe4db13e 100644 --- a/stdlib/compiler.tl +++ b/stdlib/compiler.tl @@ -954,7 +954,7 @@ (uni tfrag.fvars [reduce-left uni cfrags nil .fvars]) (uni tfrag.ffuns [reduce-left uni cfrags nil .ffuns])))))))) -(defmeth compiler eliminate-frame (me code env) +(defmeth compiler eliminate-frame (me code env : no-tregs) (if (>= me.(unalloc-reg-count) (len env.vb)) (let ((trhash (hash)) (vbhash (hash)) @@ -987,7 +987,9 @@ (let ((vb [vbhash loc])) (set vb.loc treg))) me.(free-tregs tregs) - (append (mapcar (ret ^(mov ,@1 (t 0))) (nreverse tregs)) ncode))) + (if no-tregs + ncode + (append (mapcar (ret ^(mov ,@1 (t 0))) (nreverse tregs)) ncode)))) code)) (defmeth compiler comp-let (me oreg env form) @@ -1216,7 +1218,7 @@ me.(free-treg btreg) (when (and cspy (plusp frsize) (null cspy.cap-vars)) (when-match ((close @reg @frsize @nil . @irest) . @crest) - me.(eliminate-frame code nenv) + me.(eliminate-frame code nenv t) (set code ^((close ,reg 0 ,me.treg-cntr ,*irest) ,*crest)))) nenv.(unused-check form "parameter") |