guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 02/02: srfi-11: Do not expose variables to later clauses


From: Andy Wingo
Subject: [Guile-commits] 02/02: srfi-11: Do not expose variables to later clauses
Date: Sun, 12 Jan 2020 16:23:14 -0500 (EST)

wingo pushed a commit to branch master
in repository guile.

commit 1733efe236092f2e1a738bfd98029b6c9e4035cf
Author: Tim Gesthuizen <address@hidden>
AuthorDate: Tue Dec 3 18:50:37 2019 +0100

    srfi-11: Do not expose variables to later clauses
    
    The current implementation of srfi-11s let-values allows later clauses
    to access and modify variables bound in earlier clauses when the clause
    is not a proper list.
    
    * module/srfi/srfi-11.scm (let-values): Fix switched variable names.
    * test-suite/tests/srfi-11.test (let-values): Add test checking that the
      variable cannot be changed in later clauses.
---
 module/srfi/srfi-11.scm       | 2 +-
 test-suite/tests/srfi-11.test | 9 ++++++++-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/module/srfi/srfi-11.scm b/module/srfi/srfi-11.scm
index 22bda21..7afac9c 100644
--- a/module/srfi/srfi-11.scm
+++ b/module/srfi/srfi-11.scm
@@ -91,7 +91,7 @@
                     (syntax (call-with-values (lambda () exp)
                               (lambda (new-tmp ...) inner))))))
                ((vars exp)
-                (with-syntax ((((new-tmp . new-var) ...)
+                (with-syntax ((((new-var . new-tmp) ...)
                                (let lp ((vars (syntax vars)))
                                  (syntax-case vars ()
                                    ((id . rest)
diff --git a/test-suite/tests/srfi-11.test b/test-suite/tests/srfi-11.test
index 40563dc..9bfaa43 100644
--- a/test-suite/tests/srfi-11.test
+++ b/test-suite/tests/srfi-11.test
@@ -74,7 +74,14 @@
        '(unbound-variable . ".*")
       (let-values (((x) (values 1))
                   ((y) (values (1+ x))))
-       #f))))
+       #f))
+
+    (pass-if "first binding with rest invisible to second expr"
+      (let* ((a 1)
+             (b (let-values (((a . b) (values 2 3))
+                             (c (begin (set! a 9) 4)))
+                  (list a b c))))
+        (equal? (cons a b) '(9 2 (3) (4)))))))
 
 ;;
 ;; let*-values



reply via email to

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