0.7.9.65:
[sbcl.git] / src / code / package.lisp
index e71f345..9d47baf 100644 (file)
   "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)
            (,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))))
            `(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)
           (flet ((,real-symbol-p (number)
                    (> number 1)))
             (macrolet ((,mname ()
+             (declare (optimize (inhibit-warnings 3)))
              `(block ,',BLOCK
                 (loop
                   (case ,',kind