From: Stas Boukarev Date: Sat, 1 Dec 2012 19:44:37 +0000 (+0400) Subject: Suppress warnings about possible slot name conflicts with slots from SB-PCL. X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=9c401e48bdf6abb5ec6ff574ca8cafb82fe0ba8a;p=sbcl.git Suppress warnings about possible slot name conflicts with slots from SB-PCL. When inheriting from STANDARD-CLASS and using common slot names, like SLOTS or NAME, SBCL signals a style-warning about possible package problems with slots with the same name from SB-PCL, which is unlikely to ever cause a problem. --- diff --git a/src/pcl/std-class.lisp b/src/pcl/std-class.lisp index 9c077f9..c1e6af3 100644 --- a/src/pcl/std-class.lisp +++ b/src/pcl/std-class.lisp @@ -957,6 +957,32 @@ (eq (class-of o) (class-of n))) (return nil))))))) +(defun style-warn-about-duplicate-slots (class) + (do* ((slots (slot-value class 'slots) (cdr slots)) + (dupes nil)) + ((null slots) + (when dupes + (style-warn + "~@~@:>" + class dupes))) + (let* ((slot-name (slot-definition-name (car slots))) + (oslots (and (not (eq (symbol-package slot-name) + *pcl-package*)) + (remove-if + (lambda (slot-name-2) + (or (eq (symbol-package slot-name-2) + *pcl-package*) + (string/= slot-name slot-name-2))) + (cdr slots) + :key #'slot-definition-name)))) + (when oslots + (pushnew (cons slot-name + (mapcar #'slot-definition-name oslots)) + dupes + :test #'string= :key #'car))))) + (defun %update-slots (class eslotds) (multiple-value-bind (instance-slots class-slots custom-slots) (classify-slotds eslotds) @@ -982,24 +1008,7 @@ (wrapper-slot-table nwrapper) (make-slot-table class eslotds) (wrapper-length nwrapper) nslots (slot-value class 'wrapper) nwrapper) - (do* ((slots (slot-value class 'slots) (cdr slots)) - (dupes nil)) - ((null slots) - (when dupes - (style-warn - "~@~@:>" - class dupes))) - (let* ((slot (car slots)) - (oslots (remove (slot-definition-name slot) (cdr slots) - :test #'string/= - :key #'slot-definition-name))) - (when oslots - (pushnew (cons (slot-definition-name slot) - (mapcar #'slot-definition-name oslots)) - dupes - :test #'string= :key #'car)))) + (style-warn-about-duplicate-slots class) (setf (slot-value class 'finalized-p) t) (unless (eq owrapper nwrapper) (maybe-update-standard-slot-locations class)))))