[Cuis-dev] Questions about MessageNode macro transformation

Andres Valloud ten at smallinteger.com
Sun Jul 14 22:06:07 PDT 2019

Note that transformation loses the original intent of ifNil:ifNotNil:. 
For instance,

	4 == nil ifTrue: [5]

evaluates to nil, but

	4 ifNil: [5]

evaluates to 4.  That's because the ifNil: messages were meant to 
substitute default values when none were present, rather than being used 
as control structures.

On 7/14/19 15:07, Fernando Gasperi Jabalera via Cuis-dev wrote:
> Hi there,
> I'm was trying to understand why code like:
> a ifNil: [0] ifNotNil: [1]
> when parsed got a corresponding MessageNode with an #ifTrue:ifFalse 
> selector and a receiver of the form a == nil. Following the trail lead 
> me to the macro transformations in the MessageNode class. It seems to me 
> that several messages (some loops, boolean operations like and and most 
> of the if messages) are transformed to a special or canonical form, when 
> some conditions on the number of arguments of the blocks for example are 
> satisfied, so that they can be inlined and therefore run faster. Is that 
> correct? Could someone explain a little bit about why it is this way and 
> which cases are chosen to be inlined?
> Best,
> Fernando.

More information about the Cuis-dev mailing list