[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 01/02: Fix free var computation in baseline compiler for
From: |
Andy Wingo |
Subject: |
[Guile-commits] 01/02: Fix free var computation in baseline compiler for lexical set! |
Date: |
Mon, 11 May 2020 05:40:07 -0400 (EDT) |
wingo pushed a commit to branch master
in repository guile.
commit 73ac53af734f49f729fa4465e76ed113bf55c9d0
Author: Andy Wingo <address@hidden>
AuthorDate: Mon May 11 11:38:00 2020 +0200
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.
---
module/language/tree-il/compile-bytecode.scm | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/module/language/tree-il/compile-bytecode.scm
b/module/language/tree-il/compile-bytecode.scm
index 1954240..9549ca6 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)))