[Pharo-dev] [Reflectivity] Links on Block creation vs. execution

Marcus Denker marcus.denker at inria.fr
Thu Sep 17 03:46:30 EDT 2015


Hi,

For blocks, we now have the correct model to destinguish “block creation” from “block execution”:

1) put a link on the block node, it will be called when the block definition (creation) is executed.

e.g. when you put a before link on the block in this method, it will be called when you execute the method:

TT>>method
		^[1 + 2].

2) put a link on the *body* of the block (the sequence of statements), it will be called when the block *executes*.

For the example, it would not be called when executing “TT new method”, but only when you do “TT new method value”.


Test:

testBeforeBlockSequenceNoValue
	| sequence link |
	sequence := (ReflectivityExamples >> #exampleBlockNoValue) ast statements first value body.
	self assert: sequence isSequence.
	link := MetaLink new
		metaObject: self;
		selector: #tagExec.
	sequence link: link.
	self assert: sequence hasMetalinkBefore.
	self assert: (ReflectivityExamples >> #exampleBlockNoValue) class = ReflectiveMethod.
	self assert: tag isNil.
	ReflectivityExamples new exampleBlockNoValue.
	self assert: tag isNil.
	ReflectivityExamples new exampleBlockNoValue value.
	self assert: tag = 'yes'.
	self assert: (ReflectivityExamples >> #exampleBlockNoValue) class = CompiledMethod.
	link uninstall.
	ReflectivityExamples recompile: #exampleBlockNoValue



	Marcus


More information about the Pharo-dev mailing list