Overriding #class
Martin Beck
martin.beck at hpi.uni-potsdam.de
Tue Nov 13 10:28:26 UTC 2007
Hello,
we have a little problem while implementing a CodA meta-object protocol.
The facility we try to implement now (or first :) ) is that every
instance should have the possibility to add behaviour (i.e. methods) to
it, but not to the class. Our first approach, which was also advised in
Jeff McAffer's papers, was to insert 'anonymous' classes, which
implement these methods and change the objects class to that new foo-class.
However, to retain normal behaviour, we want to override the #class
method to return the real class of the object, not the inserted one. The
CodA metastructure will be accessed through a #meta message.
As you might have expected, our problem is now, that the compiler
optimizes the #class send and therefore the code only works in the
debugger. Our question is now, whether there is an easy and shareable
(Monticello, etc.) way to disable these optimizations and whether this
idea could work with the current VM implementation? If the VM doesn't
use the #class method to bind messages to an object to the methods of
its class, we think that it could be possible, but if this lookup is not
built into the VM but rather into the ST system, we have to go another
way...
Any ideas? Maybe replacing the object which shall be extended by a
method with a proxy, catch every message and do the lookup ourselves?
Regards,
Martin
More information about the Squeak-dev
mailing list
|