[squeak-dev] did ifEmpty:ifNotEmpty: change?

Chris Muller asqueaker at gmail.com
Fri Mar 12 22:02:40 UTC 2010


I really like the new printing of CompiledMethods and the detail of
the byteCodes compared to 3.9.  Certainly a big step in helping me
understand them.  Now I'm going to have to review all of my code,
because I think I have not been paying attention to this sort of
optimization.

This would probably make a good Lint check..

On Fri, Mar 12, 2010 at 3:09 PM, Nicolas Cellier
<nicolas.cellier.aka.nice at gmail.com> wrote:
> 2010/3/12 Chris Muller <ma.chris.m at gmail.com>:
>> I know the semantics of ifEmpty: and ifNotEmpty: changed in the trunk
>> image last year, to answer the receiver instead of nil in the other
>> case.
>>
>> However, I also noticed ifEmpty:ifNotEmpty: changed but I'm not seeing
>> any semantic difference.  Is there some subtlety I'm missing by the
>> new:
>>
>> ifEmpty: emptyBlock ifNotEmpty: notEmptyBlock
>>        "Evaluate emptyBlock if I'm empty, notEmptyBlock otherwise"
>>        " If the notEmptyBlock has an argument, eval with the receiver as its argument"
>>
>>        self isEmpty ifTrue: [ ^emptyBlock value ].
>>        ^notEmptyBlock valueWithPossibleArgument: self
>>
>> vs. old:
>>
>> ifEmpty: emptyBlock ifNotEmpty: notEmptyBlock
>>        "Evaluate emptyBlock if I'm empty, notEmptyBlock otherwise"
>>        " If the notEmptyBlock has an argument, eval with the receiver as its argument"
>>
>>        ^ self isEmpty ifTrue: emptyBlock ifFalse: [notEmptyBlock
>> valueWithPossibleArgument: self]
>>
>> ?
>>
>> Thanks,
>>  Chris
>>
>
> Well, just take a look to bytecodes generated by each variant.
> Only an optimization I think.
>
> Nicolas
>
>



More information about the Squeak-dev mailing list