diff --git a/code/macros.lisp b/code/macros.lisp index 0cafaeb5b581b5840d196a708568d362c1a7ad53..d91f6bb5bfd8a0a4ef6f991fef6ff6854ea2c549 100644 --- a/code/macros.lisp +++ b/code/macros.lisp @@ -5,7 +5,7 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/macros.lisp,v 1.79 2002/11/01 17:41:53 toy Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/macros.lisp,v 1.80 2002/11/20 16:15:39 toy Exp $") ;;; ;;; ********************************************************************** ;;; @@ -1563,16 +1563,20 @@ ;;; don't want to use IGNORABLE on what might be a special var. ;;; (defmacro dolist ((var list &optional (result nil)) &body body) - (let ((n-list (gensym))) - `(do ((,n-list ,list (cdr ,n-list))) - ((endp ,n-list) - ,@(if result - `((let ((,var nil)) - ,var - ,result)) - '(nil))) - (let ((,var (car ,n-list))) - ,@body)))) + (multiple-value-bind (forms decls) + (parse-body body nil nil) + (let ((n-list (gensym))) + `(do* ((,n-list ,list (cdr ,n-list))) + ((endp ,n-list) + ,@(if result + `((let ((,var nil)) + ,var + ,result)) + '(nil))) + (let ((,var (car ,n-list))) + ,@decls + (tagbody + ,@forms)))))) (defmacro do (varlist endlist &body (body decls))