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 <[email protected]> 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
