On 3/12/2012 4:15 PM, Peter Alexander wrote:
> On Sunday, 11 March 2012 at 06:49:27 UTC, H. S. Teoh wrote:
>> On Sun, Mar 11, 2012 at 01:29:01AM -0500, Nick Sabalausky wrote:
>>> Suppose you have a delegate literal and immediately call it:
>>>
>>> auto a = x + (){ doStuff(); return y; }() + z;
>>>
>>> Does DMD ever (or always?) optimize away a delegate if it's executed
>>> immediately and never stored into a variable? If not, can it, and
>>> would it be a simple change? Is something like this already on the
>>> table?
>> [...]
>>
>> I've always wondered about whether delegates passed to opApply ever get
>> inlined.
> 
> Don't wonder. Find out!
> 
> import std.stdio;
> void doStuff() { writeln("Howdy!"); }
> void main() {
>     int x = 1, y = 2, z = 3;
>     auto a = x + (){ doStuff(); return y; }() + z;
>     writeln(a);
> }

See also: bug 4440

The patch in there, if it hasn't bit rotten to badly (I suspect it has) will 
handle _this_ case.  But almost no other
case of inlining delegates.

It'd be a good area for someone who wants an interesting and non-trivial 
problem to dig into.  It wouldn't touch all
that much of the codebase as the inliner is fairly self-contained.  At least, 
that's what I recall from when I looked at
this stuff a couple years ago.

Later,
Brad

Reply via email to