summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/txr/stdlib/compiler.tl16
1 files changed, 15 insertions, 1 deletions
diff --git a/share/txr/stdlib/compiler.tl b/share/txr/stdlib/compiler.tl
index 8b8baa20..4d776296 100644
--- a/share/txr/stdlib/compiler.tl
+++ b/share/txr/stdlib/compiler.tl
@@ -815,7 +815,7 @@
(uni (diff bfrag.ffuns lexfuns)
(if rec (diff ffuns lexfuns) ffuns))))))))
-(defmeth compiler comp-lambda (me oreg env form)
+(defmeth compiler comp-lambda-impl (me oreg env form)
(mac-param-bind form (op par-syntax . body) form
(let* ((*load-time* nil)
(pars (new (fun-param-parser par-syntax form)))
@@ -913,6 +913,20 @@
(uni [reduce-left uni ifrags nil .ffuns]
bfrag.ffuns)))))))))
+(defmeth compiler comp-lambda (me oreg env form)
+ (if *load-time*
+ me.(comp-lambda-impl oreg env form)
+ (let* ((lambda-frag me.(comp-lambda-impl oreg env form))
+ (ok-lift-var-pov (all lambda-frag.fvars
+ (lambda (sym)
+ (not env.(lookup-var sym)))))
+ (ok-lift-fun-pov (all lambda-frag.ffuns
+ (lambda (sym)
+ (not env.(lookup-fun sym))))))
+ (if (and ok-lift-var-pov ok-lift-fun-pov)
+ me.(compile oreg env ^(sys:load-time-lit nil ,form))
+ lambda-frag))))
+
(defmeth compiler comp-fun (me oreg env form)
(mac-param-bind form (op arg) form
(let ((fbin env.(lookup-fun arg t)))