summaryrefslogtreecommitdiffstats
path: root/stdlib/compiler.tl
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/compiler.tl')
-rw-r--r--stdlib/compiler.tl24
1 files changed, 15 insertions, 9 deletions
diff --git a/stdlib/compiler.tl b/stdlib/compiler.tl
index c5d00612..fd7b2017 100644
--- a/stdlib/compiler.tl
+++ b/stdlib/compiler.tl
@@ -1111,15 +1111,21 @@
(set ffuns (uni ffuns ff.ffuns)
fvars (uni fvars ff.fvars))
(list ff)))))
- (new (frag boreg
- (append ^((frame ,nenv.lev ,frsize))
- (mappend .code ffrags)
- bfrag.code
- (maybe-mov boreg bfrag.oreg)
- ^((end ,boreg)))
- (uni fvars bfrag.fvars)
- (uni (diff bfrag.ffuns lexfuns)
- (if rec (diff ffuns lexfuns) ffuns))))))))
+ (if ffrags
+ (new (frag boreg
+ (append ^((frame ,nenv.lev ,frsize))
+ (mappend .code ffrags)
+ bfrag.code
+ (maybe-mov boreg bfrag.oreg)
+ ^((end ,boreg)))
+ (uni fvars bfrag.fvars)
+ (uni (diff bfrag.ffuns lexfuns)
+ (if rec (diff ffuns lexfuns) ffuns))))
+ (new (frag boreg
+ (append me.(eliminate-frame bfrag.code nenv)
+ (maybe-mov boreg bfrag.oreg))
+ bfrag.fvars
+ bfrag.ffuns)))))))
(defmeth compiler comp-lambda-impl (me oreg env form)
(mac-param-bind form (t par-syntax . body) form