summaryrefslogtreecommitdiff
path: root/module/language/tree-il/compile-bytecode.scm
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2020-05-11 11:38:00 +0200
committerAndy Wingo <wingo@pobox.com>2020-05-11 11:39:53 +0200
commit73ac53af734f49f729fa4465e76ed113bf55c9d0 (patch)
treec8f189e438d20e7ba45e2831c08de3df40cbacd0 /module/language/tree-il/compile-bytecode.scm
parentffb210567d7430ab56fcbd5983ed72d121b27203 (diff)
downloadguile-73ac53af734f49f729fa4465e76ed113bf55c9d0.tar.gz
Fix free var computation in baseline compiler for lexical set!
* module/language/tree-il/compile-bytecode.scm (split-closures): Adjoin lexical being set to free vars.
Diffstat (limited to 'module/language/tree-il/compile-bytecode.scm')
-rw-r--r--module/language/tree-il/compile-bytecode.scm5
1 files changed, 3 insertions, 2 deletions
diff --git a/module/language/tree-il/compile-bytecode.scm b/module/language/tree-il/compile-bytecode.scm
index 195424059..9549ca6df 100644
--- a/module/language/tree-il/compile-bytecode.scm
+++ b/module/language/tree-il/compile-bytecode.scm
@@ -43,7 +43,7 @@
#:use-module (language tree-il)
#:use-module ((srfi srfi-1) #:select (filter-map
fold
- lset-union lset-difference))
+ lset-adjoin lset-union lset-difference))
#:use-module (srfi srfi-9)
#:use-module (system base types internal)
#:use-module (system vm assembler)
@@ -549,6 +549,7 @@
;; lambdas are seen, and adding set! vars to `assigned'.
(define (visit-closure exp module-scope)
(define (visit exp)
+ (define (adjoin sym f) (lset-adjoin eq? f sym))
(define (union f1 f2) (lset-union eq? f1 f2))
(define (union3 f1 f2 f3) (union f1 (union f2 f3)))
(define (difference f1 f2) (lset-difference eq? f1 f2))
@@ -605,7 +606,7 @@
(($ <lexical-set> src name gensym exp)
(hashq-set! assigned gensym #t)
- (visit exp))
+ (adjoin gensym (visit exp)))
(($ <seq> src head tail)
(union (visit head) (visit tail)))