[squeak-dev] Avoiding compiler inlining

Martin Beck martin.beck at hpi.uni-potsdam.de
Tue Jan 13 10:15:09 UTC 2009


Igor Stasenko wrote:
> 2009/1/12 nicolas cellier <ncellier at ifrance.com>:
>> Following cascading of macros, I need turning some inline off. A recurrent
>> topic in Squeak-dev.
>>
>> Well, once i thought about using a Compiler reflective annotation (i.e. a
>> pragma) in order to turn optimization off.
>>
>> Stupid me.
>> Inlined messages are made of block receiver/arguments.
>> So one would simply turn inlining off by sending a yourself message to a
>> block.
>>
>>
>>        [false] yourself whileTrue.
>>
>>        false ifTrue: [self inspect] yourself.
>>
>> Of course, yourself is not a very explicit message...
>> We could create another #turnOffInlining or something...
>>
>> Except that in Squeak as other Smalltalks, the Old Compiler is quite
>> pedantic about optimizing these messages.
>>
>> [false] yourself  <- receiver of whileTrue must be a block or variable
>> ->whileTrue.
>>
>> false ifTrue: [self inspect]  <- argument of ifTrue: must be a block or
>> variable ->yourself.
>>
>>
>> Common! You don't like the system? Change It!
>> This is just 1 method attached.
> 
> Heh.. you seem stumbled upon same things as i was :)
> 
> well, if you writing own code so you have a total control whether you
> want inlining or not, you can simply write:
> [ ... ] perform: #whileTrue
> 
But keep in mind, that (at least in my Squeak 3.10 image)
BlockContext>>whileTrue: is defined recursively:

whileTrue: aBlock
  ^ [self value] whileTrue: [aBlock value]

Thus, you still get inlined code somewhere. However, this can be changed
to use BlockContext>>restart, I think...

Regards, Martin



More information about the Squeak-dev mailing list