guile-commits
[Top][All Lists]
Advanced

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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]