On Thursday, 5 February 2015 at 14:43:40 UTC, Steven
Schveighoffer wrote:
On 2/4/15 1:46 AM, Zach the Mystic wrote:
It's a bikeshed argument, but why not:
pragma(inline, always); // warn if unable to inline
pragma(inline, never);
pragma(inline); // revert to default behavior
....?
I know `true` and `false` are keywords, but why confuse
people? What is
a "true" inline?
enum always = true;
enum never = false;
-Steve
Actually, the better reason is that, as subsequently clarified,
the pragma accepts a boolean expression, rather than just `true`
or `false`, allowing for greater flexibility. Accepting an
integer, for 3+ inlining strategies, would allow even more, but
it might not carry its own weight (same with enum always = true;,
because of namespace pollution). My gut says that an integer is
better, but I don't know if there really are more than 3 good
inlining strategies.
A more general approach would be:
enum {
inlineOff,
inlineOn,
inlineDefault,
codePathHot,
codePathCold
}
pragma(optimize, inlineOn);
pragma(optimize, codePathHot);
You'd get everything here, with options to add more later. Note
that codePathCold/Hot need not cancel inlineOff/On/Default, as
they could be implemented as orthogonally.