From: Christophe Rhodes Date: Tue, 18 May 2004 21:52:07 +0000 (+0000) Subject: 0.8.10.34: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=befd268d09043f37545713b999850df4435170d9;p=sbcl.git 0.8.10.34: Fix bug reported by Juanjo Ripoll on cmucl-imp ... MULTIPLE-VALUE-BIND can bind lambda-list keywords --- diff --git a/NEWS b/NEWS index 3d8db4e..f251dc9 100644 --- a/NEWS +++ b/NEWS @@ -2440,6 +2440,9 @@ changes in sbcl-0.8.11 relative to sbcl-0.8.10: * fixed bug: as reported by Peter Graves on #lisp IRC, passing a NIL in keyword position to MAKE-PACKAGE was not being reported as invalid. + * fixed bug: as reported by Juan Ripoll on cmucl-imp, + MULTIPLE-VALUE-BIND should be able to lexically bind lambda list + keywords. * optimization: rearranged the expansion of various defining macros so that each expands into only one top-level form in a :LOAD-TOPLEVEL context; this appears to decrease fasl sizes by @@ -2463,7 +2466,6 @@ changes in sbcl-0.8.11 relative to sbcl-0.8.10: ** on the Alpha, the compiler succeeds in compiling functions returning a known number of arguments greater than 63. - planned incompatible changes in 0.8.x: * (not done yet, but planned:) When the profiling interface settles down, it might impact TRACE. They both encapsulate functions, and diff --git a/src/code/defboot.lisp b/src/code/defboot.lisp index 625e979..79eb722 100644 --- a/src/code/defboot.lisp +++ b/src/code/defboot.lisp @@ -40,7 +40,8 @@ `(let ((,(car vars) ,value-form)) ,@body) (let ((ignore (gensym))) - `(multiple-value-call #'(lambda (&optional ,@vars &rest ,ignore) + `(multiple-value-call #'(lambda (&optional ,@(mapcar #'list vars) + &rest ,ignore) (declare (ignore ,ignore)) ,@body) ,value-form))) diff --git a/tests/smoke.impure.lisp b/tests/smoke.impure.lisp index d5e86b3..1b7e38d 100644 --- a/tests/smoke.impure.lisp +++ b/tests/smoke.impure.lisp @@ -59,5 +59,13 @@ (defconstant +const+ 3)) (assert (= (oidentity +const+) 3)) +;;; MULTIPLE-VALUE-BIND and lambda list keywords +(multiple-value-bind (&rest &optional &key &allow-other-keys) + (values 1 2 3) + (assert (= &rest 1)) + (assert (= &optional 2)) + (assert (= &key 3)) + (assert (null &allow-other-keys))) + ;;; success (quit :unix-status 104) diff --git a/version.lisp-expr b/version.lisp-expr index 8a4f4ae..13a03f1 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.8.10.33" +"0.8.10.34"