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.