I've found the problem: finalize-inheritance is not always called on class updates (even when compute-slots is called). Spec says that it is called at least once somewhere between class being defined and instantiation of its instances, and that's it.
CCL calls it just once for class and never again: Clozure Common Lisp Version 1.6-r14468M (LinuxX8664)! http://paste.lisp.org/display/121960 SBCL calls finalize-inheritance for redefined class (if it is finalized) but not for dependent classes. http://paste.lisp.org/display/121960#2 So I think we cannot depend on finalize-inheritance to detect class redefinitions/updates. What we can depend on, though? I'm not a MOP expert, but it looks like COMPUTE-SLOTS is ideal for slot-related stuff, like derived index triggers. As for schema stuff, I don't know... But it looks like we care mostly about slots, and we don't need layout to be computed. So maybe we can move all class definition/redefinition/update related code to COMPUTE-SLOTS method (after standard method have worked, obviously). This is going to be 100% foolproof, as I don't see how implementation can sidestep COMPUTE-SLOTS when doing anything about class. As for alternatives, I don't know... SHARED-INITIALIZE is not called for updated classes either, so maybe shared-initialize + update-dependent combo or something. _______________________________________________ elephant-devel site list elephant-devel@common-lisp.net http://common-lisp.net/mailman/listinfo/elephant-devel