X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcode%2Fpackage.lisp;h=9d47baf2db5a44a0f8707c91edbb70f68394736f;hb=5bf4a6a677c80a71dfa31b5c9c374f986594392f;hp=e71f3451b0af942e1bc0415b11aace3aa3d45f76;hpb=34dd23563d2f5cf05c72b971da0d0b065a09bf2a;p=sbcl.git diff --git a/src/code/package.lisp b/src/code/package.lisp index e71f345..9d47baf 100644 --- a/src/code/package.lisp +++ b/src/code/package.lisp @@ -111,7 +111,7 @@ "DO-SYMBOLS (VAR [PACKAGE [RESULT-FORM]]) {DECLARATION}* {TAG | FORM}* Executes the FORMs at least once for each symbol accessible in the given PACKAGE with VAR bound to the current symbol." - (multiple-value-bind (body decls) body-decls + (multiple-value-bind (body decls) (parse-body body-decls nil) (let ((flet-name (gensym "DO-SYMBOLS-"))) `(block nil (flet ((,flet-name (,var) @@ -231,7 +231,13 @@ (,packages `,(mapcar (lambda (package) (if (packagep package) package - (find-package package))) + ;; Maybe FIND-PACKAGE-OR-DIE? + (or (find-package package) + (error 'simple-package-error + ;; could be a character + :name (string package) + :format-control "~@<~S does not name a package ~:>" + :format-arguments (list package))))) (if (consp ,these-packages) ,these-packages (list ,these-packages)))) @@ -244,6 +250,7 @@ `(setf ,package-use-list (package-%use-list (car ,packages))) `(declare (ignore ,package-use-list))) (macrolet ((,init-macro (next-kind) + (declare (optimize (inhibit-warnings 3))) (let ((symbols (gensym))) `(progn (setf ,',kind ,next-kind) @@ -295,6 +302,7 @@ (flet ((,real-symbol-p (number) (> number 1))) (macrolet ((,mname () + (declare (optimize (inhibit-warnings 3))) `(block ,',BLOCK (loop (case ,',kind