From: Christophe Rhodes Date: Tue, 25 Jul 2006 16:06:31 +0000 (+0000) Subject: 0.9.14.32: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=42938a8cffe21be4b5a50d2253bbe76bab25e16a;p=sbcl.git 0.9.14.32: Bandage for James Y Knight "internal PCL type error" sbcl-devel 2006-06-20. ... don't let invalid-wrappers near a cache in MAKE-EMF-CACHE. ... test case (+ whitespace) Note that MAKE-EMF-CACHE via MEC-ALL-CLASSES-FOO functions is hideously written, and will perform the same work several times, pointlessly. Rather than build up several large lists with duplicated class lists between them, it might be sensible to perform some kind of walk down the class hierarchies, performing wrapper invalidation and regeneration and class finalization as required. --- diff --git a/src/pcl/methods.lisp b/src/pcl/methods.lisp index 04f8dd5..adb89d8 100644 --- a/src/pcl/methods.lisp +++ b/src/pcl/methods.lisp @@ -1039,7 +1039,11 @@ ;; invalidate wrappers. (let ((wrappers (get-wrappers-from-classes nkeys wrappers classes metatypes))) - (setq cache (fill-cache cache wrappers value))))))))) + (when (if (atom wrappers) + (not (invalid-wrapper-p wrappers)) + (every (complement #'invalid-wrapper-p) + wrappers)) + (setq cache (fill-cache cache wrappers value)))))))))) (if classes-list (mapc #'add-class-list classes-list) (dolist (method (generic-function-methods generic-function)) diff --git a/src/pcl/std-class.lisp b/src/pcl/std-class.lisp index 02862cf..ab9f9b3 100644 --- a/src/pcl/std-class.lisp +++ b/src/pcl/std-class.lisp @@ -866,7 +866,7 @@ wrapper nwrapper) (do* ((slots (slot-value class 'slots) (cdr slots)) (dupes nil)) - ((null slots) + ((null slots) (when dupes (style-warn "~@