[Cuis-dev] Questions about MessageNode macro transformation
Andres Valloud
ten at smallinteger.com
Sun Jul 14 22:06:56 PDT 2019
(everybody knows I meant to write 4 == nil ifFalse: [5])
On 7/14/19 22:06, Andres Valloud via Cuis-dev wrote:
> 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