X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fpcl%2Fmacros.lisp;h=ad4e24f7dcd2173f83c55731043a2f267e7cd65a;hb=7d853ed1882221bc790062e423a74a620f6e4ee1;hp=3060a0648022dcf2602b5c73eecc5f0ce0b7633b;hpb=444d2072bc52e60a41af62ee22e343e76109212f;p=sbcl.git diff --git a/src/pcl/macros.lisp b/src/pcl/macros.lisp index 3060a06..ad4e24f 100644 --- a/src/pcl/macros.lisp +++ b/src/pcl/macros.lisp @@ -157,10 +157,33 @@ (with-single-package-locked-error (:symbol name "using ~A as the class-name argument in ~ (SETF FIND-CLASS)")) - (let ((cell (find-class-cell name))) + (let* ((cell (find-class-cell name)) + (class (find-class-cell-class cell))) (setf (find-class-cell-class cell) new-value) - (when (and (eq *boot-state* 'complete) (null new-value)) - (setf (find-classoid name) nil)) + (when (eq *boot-state* 'complete) + (if (null new-value) + (progn + (setf (find-classoid name) new-value) + (when class + ;; KLUDGE: This horror comes about essentially + ;; because we use the proper name of a classoid + ;; to do TYPEP, which needs to be available + ;; early, and also to determine whether TYPE-OF + ;; should return the name or the class (using + ;; CLASSOID-PROPER-NAME). So if we are removing + ;; proper nameness, arrange for + ;; CLASSOID-PROPER-NAME to do the right thing + ;; too. (This is almost certainly not the right + ;; solution; instead, CLASSOID-NAME and + ;; FIND-CLASSOID should be direct parallels to + ;; CLASS-NAME and FIND-CLASS, and TYPEP on + ;; not-yet-final classes should be compileable. + (let ((classoid (layout-classoid (slot-value class 'wrapper)))) + (setf (classoid-name classoid) nil)))) + + (let ((classoid (layout-classoid (slot-value new-value 'wrapper)))) + (setf (find-classoid name) classoid) + (set-class-type-translation new-value classoid)))) (when (or (eq *boot-state* 'complete) (eq *boot-state* 'braid)) (update-ctors 'setf-find-class :class new-value :name name)) @@ -168,11 +191,6 @@ (t (error "~S is not a legal class name." name)))) -(/show "pcl/macros.lisp 230") - -(defun find-wrapper (symbol) - (class-wrapper (find-class symbol))) - (/show "pcl/macros.lisp 241") (defmacro function-funcall (form &rest args)