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.