http://d.puremagic.com/issues/show_bug.cgi?id=5710


Steven Schveighoffer <schvei...@yahoo.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |schvei...@yahoo.com


--- Comment #16 from Steven Schveighoffer <schvei...@yahoo.com> 2013-05-06 
11:01:01 PDT ---
(In reply to comment #0)

> class Foo {
>     uint doStuff(alias fun)(uint a, uint b) { return fun(a, b); }
> }
> 
> void main() {
>     auto foo = new Foo;
> 
>     uint add(uint a, uint b) { return a + b; }
> 
>     foo.doStuff!add(1, 2);
> }

This is definitely not good.

I don't think we need to alter the ABI for this.  The 'this' pointer of the
frame isn't used inside doStuff, just inside the template instantiation.  The
compiler can be smart enough to recognize that fun(a, b) is really:

fun(a, b, frameptr), and that frameptr is passed implicitly as a parameter.  It
does not have to be spelled out in the parameters to doStuff.

I don't like the *spirit* of kenji's solution, that context pointers are an
array.  Given that this is a template, and the compiler has the ability to pass
and receive, and write code for, any hidden parameter it wishes, it's simply a
matter of lowering.  Like foreach, which injects hidden code and function
return handling.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------

Reply via email to