This is now in 3.0 (starting from 3.0 #133). There is now even an example for the use of #optIlineNone Do this: SmalltalkImage compilerClass: OpalCompiler. OpalCompiler allowNonBooleanReceivers: true. 1 ifFalse: [ 'ups' ] you get a DNU that SmallInteger does not understand #ifTrue: Of course this does not turn of the inling in general, it just recompiled the send (kind of like a doit) on-optimized and executes that in #mustBeBooleanIn: in the right context with all variables correctly looked up in the context. (it is only a proof of concept right now and not working for anything more complex.) Marcus On May 14, 2013, at 4:02 PM, Marcus Denker <marcus.denker@inria.fr> wrote:
In 3.0, when using the new Compiler, there is now a new way to set options that the compile chain can act on (Opal takes care to hand them through all the stages).
For now, the there are two cases where we use options: controlling inlining and to generate long ivar access bytecodes even when short ones would be enough:
defaultOptions ^ #( "by default we inline all optimized constructs" + optInlineIf + optInlineIfNil + optInlineAndOr + optInlineWhile + optInlineToDo + optInlineCase
- optIlineNone "to turn off all. Overrides the others" - optLongIvarAccessBytecodes "special for Contexts" )
There are two ways to set compiler options. One is per Class Hierarchy. For example, in InstructionStream class, there is this method:
compiler
^super compiler options: #(+ optLongIvarAccessBytecodes)
The other way to use it is with a pragma:
test <compilerOptions: #(-optInlineIf)>
^1 < 2 ifTrue: [ 'Hello!' ]
The options API idea is taken from NativeBoost:
#( + option1 option2 - option3 ... )
each time the #+ is seen, the options which follow it will be subject for inclusion and, correspondingly, if #- seen, then they will be excluded.
By default, (if none of #+ or #- specified initially), all options are subject for inclusion.
Like NativeBoost it uses #doesNotUnderstand, so e.g. if you want to have a flag for your own Compiler Plugin, just set it and query the compilationContext by sending the flag symbol as a message.
Next: AST Transformation Plugins⦠ready later this week.
Marcus