"Brad Roberts" <[email protected]> wrote in message news:[email protected]... > 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. >
Do you think that patch would be a good starting place for further work, or would a proper solution likely necessitate an entirely different approach?
