diff options
Diffstat (limited to 'stdlib/compiler.tl')
-rw-r--r-- | stdlib/compiler.tl | 24 |
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 |