On 18 May 2014, at 21:42, Johan Fabry <jfa...@dcc.uchile.cl> wrote:

> 
> I understand, thanks for the info. 
> 
> Let me simplify my question: Using slots is there a reasonably 
> straightforward way for me to intercept variable accesses in all methods 
> within a class?

Yes, you can make a special slot subclass and this defines than the semantics 
of the slot. You have full control of what code to emit.

> This so that I can transparently redirect them to a dictionary lookup.

there will be Dictionay based slots coming with Pharo4, no need to roll your 
own for that.

In addition, I want to add support for Reflectivity meta links on slots. This 
means that instead of changing the class definition,
you will be able to put a MetaLink on the slot definition (before, after, 
around/instead). This is for the more “reflective” use cases.

Now this is all in an early state.. the idea is to finish all this over the 
summer :-)

With Camille we did a quick 20 minute prototype of the whole thing: Subclass of 
Slot. Opal calles #emitStore: and #emitRead:
on slots. the abstract slot has a fall-back that just uses reflection:

emitValue: aMethodBuilder
        aMethodBuilder
                pushLiteral: self;
                pushReceiver;
                send: #read:

while you can implement it yourself and emit the bytecode that
you need. e.g. for the ivarSlot subclass it is

emitValue: methodBuilder

        methodBuilder pushInstVar: index.

making Ivar Slots be as efficient as instance variables now.

        Marcus
 

Reply via email to