[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