Hello Marcus,

I wanted to modify some event creation in Epicea and I just used this mechanism.
It's pretty cool!

Cheers,

On Thu, Jun 18, 2015 at 2:36 PM, Marcus Denker <marcus.denker@inria.fr> wrote:
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.


--
Gustavo Santos