1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 03:40:34 +02:00

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.
This commit is contained in:
Andy Wingo 2020-05-11 11:38:00 +02:00
parent ffb210567d
commit 73ac53af73

View file

@ -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)))