guile-commits
[Top][All Lists]
Advanced

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

[Guile-commits] GNU Guile branch, stable-2.0, updated. v2.0.9-180-g866af


From: Mark H Weaver
Subject: [Guile-commits] GNU Guile branch, stable-2.0, updated. v2.0.9-180-g866af5d
Date: Mon, 03 Feb 2014 02:57:42 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Guile".

http://git.savannah.gnu.org/cgit/guile.git/commit/?id=866af5da3d11ac4a9df44ee8c5b1781a0073c288

The branch, stable-2.0 has been updated
       via  866af5da3d11ac4a9df44ee8c5b1781a0073c288 (commit)
      from  48eb9021190766577a79ec26fe0b2f3332254561 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 866af5da3d11ac4a9df44ee8c5b1781a0073c288
Author: Mark H Weaver <address@hidden>
Date:   Sun Feb 2 21:13:47 2014 -0500

    define-values: Blackhole 'dummy'; work around lack of toplevel hygiene.
    
    * module/ice-9/boot-9.scm (define-values): Use 'generate-temporaries' to
      generate a fresh name for 'dummy', to work around the lack of hygiene
      for macro-introduced toplevel identifiers.  Blackhole 'dummy' to avoid
      keeping garbage alive.  Add more comments.

-----------------------------------------------------------------------

Summary of changes:
 module/ice-9/boot-9.scm |   76 +++++++++++++++++++++++++++-------------------
 1 files changed, 45 insertions(+), 31 deletions(-)

diff --git a/module/ice-9/boot-9.scm b/module/ice-9/boot-9.scm
index c6cdcd3..42d7d78 100644
--- a/module/ice-9/boot-9.scm
+++ b/module/ice-9/boot-9.scm
@@ -596,11 +596,13 @@ If there is no handler at all, Guile prints an error and 
then exits."
   (lambda (orig-form)
     (syntax-case orig-form ()
       ((_ () expr)
-       #`(define dummy
-           (call-with-values (lambda () expr)
-             (case-lambda
-               (() #f)
-               (_ (%define-values-arity-error))))))
+       ;; XXX Work around the lack of hygienic top-level identifiers
+       (with-syntax (((dummy) (generate-temporaries '(dummy))))
+         #`(define dummy
+             (call-with-values (lambda () expr)
+               (case-lambda
+                 (() #f)
+                 (_ (%define-values-arity-error)))))))
       ((_ (var) expr)
        (identifier? #'var)
        #`(define var
@@ -610,19 +612,25 @@ If there is no handler at all, Guile prints an error and 
then exits."
                (_ (%define-values-arity-error))))))
       ((_ (var0 ... varn) expr)
        (and-map identifier? #'(var0 ... varn))
-       #`(begin
-           (define dummy
-             (call-with-values (lambda () expr)
-               (case-lambda
-                 ((var0 ... varn)
-                  (list var0 ... varn))
-                 (_ (%define-values-arity-error)))))
-           (define var0
-             (let ((v (car dummy)))
-               (set! dummy (cdr dummy))
-               v))
-           ...
-           (define varn (car dummy))))
+       ;; XXX Work around the lack of hygienic toplevel identifiers
+       (with-syntax (((dummy) (generate-temporaries '(dummy))))
+         #`(begin
+             ;; Avoid mutating the user-visible variables
+             (define dummy
+               (call-with-values (lambda () expr)
+                 (case-lambda
+                   ((var0 ... varn)
+                    (list var0 ... varn))
+                   (_ (%define-values-arity-error)))))
+             (define var0
+               (let ((v (car dummy)))
+                 (set! dummy (cdr dummy))
+                 v))
+             ...
+             (define varn
+               (let ((v (car dummy)))
+                 (set! dummy #f)  ; blackhole dummy
+                 v)))))
       ((_ var expr)
        (identifier? #'var)
        #'(define var
@@ -630,19 +638,25 @@ If there is no handler at all, Guile prints an error and 
then exits."
              list)))
       ((_ (var0 ... . varn) expr)
        (and-map identifier? #'(var0 ... varn))
-       #`(begin
-           (define dummy
-             (call-with-values (lambda () expr)
-               (case-lambda
-                 ((var0 ... . varn)
-                  (list var0 ... varn))
-                 (_ (%define-values-arity-error)))))
-           (define var0
-             (let ((v (car dummy)))
-               (set! dummy (cdr dummy))
-               v))
-           ...
-           (define varn (car dummy)))))))
+       ;; XXX Work around the lack of hygienic toplevel identifiers
+       (with-syntax (((dummy) (generate-temporaries '(dummy))))
+         #`(begin
+             ;; Avoid mutating the user-visible variables
+             (define dummy
+               (call-with-values (lambda () expr)
+                 (case-lambda
+                   ((var0 ... . varn)
+                    (list var0 ... varn))
+                   (_ (%define-values-arity-error)))))
+             (define var0
+               (let ((v (car dummy)))
+                 (set! dummy (cdr dummy))
+                 v))
+             ...
+             (define varn
+               (let ((v (car dummy)))
+                 (set! dummy #f)  ; blackhole dummy
+                 v))))))))
 
 (define-syntax-rule (delay exp)
   (make-promise (lambda () exp)))


hooks/post-receive
-- 
GNU Guile



reply via email to

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