From 42938a8cffe21be4b5a50d2253bbe76bab25e16a Mon Sep 17 00:00:00 2001 From: Christophe Rhodes Date: Tue, 25 Jul 2006 16:06:31 +0000 Subject: [PATCH] 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. --- src/pcl/methods.lisp | 6 +++++- src/pcl/std-class.lisp | 4 ++-- tests/clos.impure.lisp | 26 ++++++++++++++++++++++++++ tests/mop-18.impure-cload.lisp | 12 ++++++------ version.lisp-expr | 2 +- 5 files changed, 40 insertions(+), 10 deletions(-) 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 "~@