package locks and compile-time effects of DEFCLASS
[sbcl.git] / src / pcl / defclass.lisp
index cd9bd18..e342b6e 100644 (file)
   ;; actual type as a compile-time side-effect would probably be a bad
   ;; idea and (2) anyway we don't need to modify it in order to make
   ;; NAME be recognized as a valid type name)
+  (with-single-package-locked-error (:symbol name "proclaiming ~S as a class"))
   (unless (info :type :kind name)
     ;; Tell the compiler to expect a class with the given NAME, by
     ;; writing a kind of minimal placeholder type information. This
            ;; that :WHERE-FROM is :DEFINED, not :DECLARED, and should
            ;; probably be factored into a common function -- eg.
            ;; (%proclaim-ftype name declared-or-defined).
-           (when (eq (info :function :where-from name) :assumed)
-             (proclaim-as-fun-name name)
-             (note-name-defined name :function)
-             (setf (info :function :where-from name) :defined
-                   (info :function :type name) type))))
+           (with-single-package-locked-error (:symbol name "proclaiming ~S as a function")
+             (when (eq (info :function :where-from name) :assumed)
+               (proclaim-as-fun-name name)
+               (note-name-defined name :function)
+               (setf (info :function :where-from name) :defined
+                     (info :function :type name) type)))))
     (let ((rtype (specifier-type '(function (t) t)))
           (wtype (specifier-type '(function (t t) t))))
       (dolist (reader readers)