X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fpcl%2Fstd-class.lisp;h=2e2464f0e165e4c21eadded35a1ef6befa618caa;hb=2f1071f50ae43bce938aacf03d67d9626014a076;hp=d03f94ebf9f71ce15a702fa164d9f0d1169fc53c;hpb=c8cc0137e55e6179f6af344f42e54f514660f68b;p=sbcl.git diff --git a/src/pcl/std-class.lisp b/src/pcl/std-class.lisp index d03f94e..2e2464f 100644 --- a/src/pcl/std-class.lisp +++ b/src/pcl/std-class.lisp @@ -1380,6 +1380,7 @@ (added ()) (discarded ()) (plist ())) + ;; local --> local transfer value ;; local --> shared discard value, discard slot ;; local --> -- discard slot @@ -1389,6 +1390,15 @@ ;; -- --> local add slot ;; -- --> shared -- + ;; Collect class slots from inherited wrappers. Needed for + ;; shared -> local transfers of inherited slots. + (let ((inherited (layout-inherits owrapper))) + (loop for i from (1- (length inherited)) downto 0 + for layout = (aref inherited i) + when (typep layout 'wrapper) + do (dolist (slot (wrapper-class-slots layout)) + (pushnew slot oclass-slots :key #'car)))) + ;; Go through all the old local slots. (let ((opos 0)) (dolist (name olayout)