[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Guile-commits] GNU Guile branch, stable-2.0, updated. v2.0.9-180-g866af5d,
Mark H Weaver <=