~ chicken-core (chicken-5) 7c14fd6df17c3b7a6f4d2639c5218cce0246e5d9


commit 7c14fd6df17c3b7a6f4d2639c5218cce0246e5d9
Author:     Evan Hanson <evhan@foldling.org>
AuthorDate: Sat May 21 17:08:58 2016 +1200
Commit:     Peter Bex <peter@more-magic.net>
CommitDate: Sun May 22 13:21:59 2016 +0200

    Make special-cased parameters return the new value
    
    This ensures the correct value of a parameter is used within the body of
    a `parameterize` form. Previously, the original value would be returned
    from the conversion step and used as the new value within the form's
    body, making the parameterization a noop.
    
    Supplements the previous commit's fix for #1285.
    
    Signed-off-by: Peter Bex <peter@more-magic.net>

diff --git a/library.scm b/library.scm
index 10b43b0e..a32ee8cb 100644
--- a/library.scm
+++ b/library.scm
@@ -1903,28 +1903,31 @@ EOF
       (##core#inline "C_i_check_port" x 0 #t) ) )
 
 (define (current-input-port . args)
-  (when (pair? args)
-    (let ((p (car args)))
-      (##sys#check-port p 'current-input-port)
-      (let-optionals (cdr args) ((convert? #t) (set? #t))
-	(when set? (set! ##sys#standard-input p))) ) )
-  ##sys#standard-input)
+  (if (null? args)
+      ##sys#standard-input
+      (let ((p (car args)))
+	(##sys#check-port p 'current-input-port)
+	(let-optionals (cdr args) ((convert? #t) (set? #t))
+	  (when set? (set! ##sys#standard-input p)))
+	p)))
 
 (define (current-output-port . args)
-  (when (pair? args)
-    (let ((p (car args)))
-      (##sys#check-port p 'current-output-port)
-      (let-optionals (cdr args) ((convert? #t) (set? #t))
-	(when set? (set! ##sys#standard-output p))) ) )
-  ##sys#standard-output)
+  (if (null? args)
+      ##sys#standard-output
+      (let ((p (car args)))
+	(##sys#check-port p 'current-output-port)
+	(let-optionals (cdr args) ((convert? #t) (set? #t))
+	  (when set? (set! ##sys#standard-output p)))
+	p)))
 
 (define (current-error-port . args)
-  (when (pair? args)
-    (let ((p (car args)))
-      (##sys#check-port p 'current-error-port)
-      (let-optionals (cdr args) ((convert? #t) (set? #t))
-	(when set? (set! ##sys#standard-error p))) ) )
-  ##sys#standard-error)
+  (if (null? args)
+      ##sys#standard-error
+      (let ((p (car args)))
+	(##sys#check-port p 'current-error-port)
+	(let-optionals (cdr args) ((convert? #t) (set? #t))
+	  (when set? (set! ##sys#standard-error p)))
+	p)))
 
 (define (##sys#tty-port? port)
   (and (not (zero? (##sys#peek-unsigned-integer port 0)))
@@ -4099,13 +4102,13 @@ EOF
       (lambda () (set! ##sys#current-exception-handler oldh)) ) ) )
 
 (define (current-exception-handler . args)
-  (when (pair? args)
-    (let ((proc (car args)))
-      (##sys#check-closure proc 'current-exception-handler)
-      (let-optionals (cdr args) ((convert? #t) (set? #t))
-	(when set?
-	  (set! ##sys#current-exception-handler proc))) ) )
-  ##sys#current-exception-handler)
+  (if (null? args)
+      ##sys#current-exception-handler
+      (let ((proc (car args)))
+	(##sys#check-closure proc 'current-exception-handler)
+	(let-optionals (cdr args) ((convert? #t) (set? #t))
+	  (when set? (set! ##sys#current-exception-handler proc)))
+	proc)))
 
 (define (make-property-condition kind . props)
   (##sys#make-structure
diff --git a/tests/library-tests.scm b/tests/library-tests.scm
index 13f539dd..eb9506ad 100644
--- a/tests/library-tests.scm
+++ b/tests/library-tests.scm
@@ -543,8 +543,12 @@ A
 	(parameterize ((current-output-port out)
 		       (current-error-port out)
 		       (current-input-port in)
-		       (current-exception-handler void))
-	  (void))))))
+		       (current-exception-handler list))
+	  (display "bar")
+	  (display "!" (current-error-port))
+	  (assert (equal? (read) 'foo))
+	  (assert (equal? (get-output-string out) "bar!"))
+	  (assert (equal? (signal 'baz) '(baz))))))))
   (assert (equal? original-input (current-input-port)))
   (assert (equal? original-output (current-output-port)))
   (assert (equal? original-error (current-error-port)))
Trap