=================================================================== --- library.scm (Revision 11558) +++ library.scm (Arbeitskopie) @@ -2047,12 +2047,18 @@ (##sys#setslot ##sys#default-parameter-vector i val) (lambda arg (let ([n (##sys#size ##sys#current-parameter-vector)]) - (cond [(pair? arg) + (cond [(and (pair? arg) (pair? (cdr arg))) (when (fx>= i n) (set! ##sys#current-parameter-vector (##sys#grow-vector ##sys#current-parameter-vector (fx+ i 1) ##sys#snafu) ) ) (##sys#setslot ##sys#current-parameter-vector i (guard (##sys#slot arg 0))) (##core#undefined) ] + [(pair? arg) + (if (or (fx>= i n) + (eq? (##sys#slot ##sys#current-parameter-vector i) ##sys#snafu)) + (##sys#setslot ##sys#default-parameter-vector i (guard (##sys#slot arg 0))) + (##sys#setslot ##sys#current-parameter-vector i (guard (##sys#slot arg 0)))) + (##core#undefined) ] [(fx>= i n) (##sys#slot ##sys#default-parameter-vector i) ] [else Index: chicken-more-macros.scm =================================================================== --- chicken-more-macros.scm (Revision 11558) +++ chicken-more-macros.scm (Arbeitskopie) @@ -213,7 +213,7 @@ [aliases2 (##sys#map (lambda (z) (gensym)) params)] ) `(let ,(##sys#append (map ##sys#list aliases params) (map ##sys#list aliases2 vals)) (let ((,swap (lambda () - ,@(map (lambda (a a2) `(let ((t (,a))) (,a ,a2) (##core#set! ,a2 t))) + ,@(map (lambda (a a2) `(let ((t (,a))) (,a ,a2 'local) (##core#set! ,a2 t))) aliases aliases2) ) ) ) (##sys#dynamic-wind ,swap