summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/txr/stdlib/compiler.tl10
1 files changed, 8 insertions, 2 deletions
diff --git a/share/txr/stdlib/compiler.tl b/share/txr/stdlib/compiler.tl
index b5e3d645..47abf573 100644
--- a/share/txr/stdlib/compiler.tl
+++ b/share/txr/stdlib/compiler.tl
@@ -69,7 +69,12 @@
(compile-error me.co.last-form "duplicate variable: ~s" sym))
(let* ((loc ^(v ,(ppred me.lev) ,(pinc me.v-cntr)))
(bn (new binding sym sym loc loc env me)))
- (set me.vb (acons-new sym bn me.vb))))
+ (set me.vb (acons sym bn me.vb))))
+
+ (:method extend-var* (me sym)
+ (let* ((loc ^(v ,(ppred me.lev) ,(pinc me.v-cntr)))
+ (bn (new binding sym sym loc loc env me)))
+ (set me.vb (acons sym bn me.vb))))
(:method extend-fun (me sym)
(when (assoc sym me.fb)
@@ -358,7 +363,8 @@
(pend frag.code
(maybe-mov bind.loc frag.oreg))
(set ffuns (uni ffuns frag.ffuns)
- fvars (uni fvars frag.fvars)))))))))
+ fvars (uni fvars frag.fvars))))
+ (t (if seq nenv.(extend-var* sym))))))))
(bfrag me.(comp-progn oreg nenv body))
(boreg (if env.(out-of-scope bfrag.oreg) oreg bfrag.oreg)))
(new (frag boreg