[elephant-devel] finalize-inheritance
Alex Mizrahi
alex.mizrahi at gmail.com
Thu May 12 17:05:07 UTC 2011
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.
More information about the elephant-devel
mailing list