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