summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/txr/stdlib/compiler.tl1
-rw-r--r--txr.114
2 files changed, 15 insertions, 0 deletions
diff --git a/share/txr/stdlib/compiler.tl b/share/txr/stdlib/compiler.tl
index 88792259..8b8baa20 100644
--- a/share/txr/stdlib/compiler.tl
+++ b/share/txr/stdlib/compiler.tl
@@ -1087,6 +1087,7 @@
(mac-param-bind form (op inits (: (test nil test-p) . rets) incs . body) form
(let* ((treg me.(alloc-treg))
(ifrag me.(comp-progn treg env inits))
+ (*load-time* nil)
(tfrag (if test-p me.(compile oreg env test)))
(rfrag me.(comp-progn oreg env rets))
(nfrag me.(comp-progn treg env incs))
diff --git a/txr.1 b/txr.1
index c8da18f7..bc9096c4 100644
--- a/txr.1
+++ b/txr.1
@@ -71539,6 +71539,20 @@ closure which is returned. Invoking the closure doesn't cause the
.code load-time
expressions to be evaluated.
+The
+.code load-time
+form is subject to compiler optimizations. A top-level expression is assumed to
+be evaluated in load time, so
+.code load-time
+does nothing in a top-level expression. It becomes active inside forms
+embedded in a
+.code lambda
+expressions. Since
+.code load-time
+may be used to hoist calculations outside of loops,
+.code load-time
+is also active in those parts of loops which are repeatedly evaluated.
+
The use of
.code load-time
is similar to defining a variable and then referring to the variable.