Hi,

in Pharo5  #120 we have lots of progress with Reflectivity regarding to 
“reificated values”.

1) more reificated value are working.

#arguments - an array of the arguments of a message send or method
#receiver - receiver of a message (or method executed)
#context for Methods
#sender for method and message

This means we have now all the info needed to e.g. pass all date needed to do a 
message send on the meta level.
(receiver, args, selector), or a variable store (#name, #newValue).

2) Reifications as arguments to conditions. When the block used as a condition 
has arguments, the name
is matched to the possible reifications and if valid this value is passed as an 
argument. Very useful e.g. for
object specific links:

link := MetaLink new 
                condition: [: object | object == <the object I am intersted 
in>];
                metaObject: <someObject>; 
                selector: <some selector>

This link would only be active for this one object.

3) Reifications as meta object
-------------

Every valid reified value can be the metaobject of the link. e.g. you can now 
define a link where the meta is the node where the Link is installed:

link := MetaLink new 
                metaObject: #node; 
                selector: #tagHasBeenExecuted.

Or the #receiver:

link := MetaLink new 
                metaObject: #receiver; 
                selector: #perform:withArguments:;
                arguments: #(selector arguments).

TODO

-> #slot, #global. #variable reifications
-> #after needs to wrap in ensure:
-> primitives
-> more tests
-> optimize link preambles: when reifying both #arguments and #receiver, 
    merge the preamble into one for performance.
 

Reply via email to