On Tue, 22 May 2012 14:28:33 -0400, Jacob Carlborg <d...@me.com> wrote:
On 2012-05-22 20:14, Steven Schveighoffer wrote:
I would suggest that it should be:
function(Test this) with the 'this' being mangled into the name, and
affect the calling convention.
Structs would be function(ref Test this).
And const/shared/immutable decorations should apply properly to the
'this' parameter.
I'd wholeheartedly support such an improvement. In fact, I'd be willing
to write a DIP on it, if Walter had a chance of approving it. I just
don't know if it would happen...
It needs to be possible to compose delegates:
class Foo
{
void foo () {};
}
void delegate () dg;
dg.funcptr = &Foo.foo;
Error, cannot cast function of type void function(Foo this) to void
function(void *this)
dg.funcptr = cast(void function(void *this))&Foo.foo; // ok
dg.ptr = cast(void*) new Foo;
dg();
At least it needs to be possible to do that in code marked with @system.
I think it should require a cast, regardless of the @system attribute, you
are telling the type system a function that requires a Foo is now OK to
accept a void *. I don't think that's something we should accept
implicitly.
-Steve