diff --git a/code/macros.lisp b/code/macros.lisp index ad7d171917af6ea01aec33aa0091f8a5ccccf531..4b021172bdee0490dc1e839a4d7f5610386ba736 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.87 2003/02/08 11:33:39 gerd Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/code/macros.lisp,v 1.88 2003/02/18 16:55:49 toy Exp $") ;;; ;;; ********************************************************************** ;;; @@ -1243,11 +1243,17 @@ (let ((keyform-value (gensym)) (clauses ()) (keys ())) - (dolist (case cases) + (do* ((case-list cases (cdr case-list)) + (case (first case-list) (first case-list))) + ((null case-list)) (cond ((atom case) (error "~S -- Bad clause in ~S." case name)) ((and (not allow-otherwise) - (memq (car case) '(t otherwise))) + (null (cdr case-list)) + (memq (car case) '(t otherwise))) + ;; The CLHS says OTHERWISE clause is an OTHERWISE clause + ;; only if it's the last case. Otherwise, it's just a + ;; normal clause. (if errorp (error "No default clause allowed in ~S: ~S" name case) (push `(t nil ,@(rest case)) clauses)))