no property 'opCall' for type ... what am I doing wrong?
Daniel Keep
daniel.keep.lists at gmail.com
Sat May 5 03:04:37 PDT 2007
Frits van Bommel wrote:
> Daniel Keep wrote:
>>
>> Frits van Bommel wrote:
>>> Daniel Keep wrote:
>>>> Just keep in mind that you can't take the address of a function
>>>> argument, so if you do this inside a function, you have to make a copy
>>>> first.
>>> I'm surprised by this statement, and can't find a mention of it in the
>>> spec.
>>> Do you have a reference for it?
>>
>> I don't know if it's in the spec (I can't remember ever running across
>> it), but I know it doesn't work.
>>
>> The problem is that the D calling convention allows for up to one
>> argument to be passed using registers, which don't *have* an address, so
>> taking the address of them doesn't always make sense.
>
> DMD automatically copies a register-argument to a local variable on the
> stack if the address is required. As does my GDC, it seems...
>
>> In any case, I know the compiler has barfed every time I've tried to do
>> it...
>
> It's always worked fine for me.
>
> For instance, the following works, whether I'm using DMD or GDC:
> ---
> import std.stdio;
>
> void bar(int* x) {
> assert(*x == 42);
> writefln("*%s = %s", x, *x);
> }
>
> void foo(int x) {
> bar(&x);
> }
>
> void main() {
> foo(42);
> }
> ---
> (DMD 1.014, GDC 0.23/amd64)
Weird; you're right. It does work. I *swear* it didn't used to, tho.
I remember having to work around the problem for a library I was writing
and being a bit annoyed at the time...
Oh well.
-- Daniel
--
int getRandomNumber()
{
return 4; // chosen by fair dice roll.
// guaranteed to be random.
}
http://xkcd.com/
v2sw5+8Yhw5ln4+5pr6OFPma8u6+7Lw4Tm6+7l6+7D
i28a2Xs3MSr2e4/6+7t4TNSMb6HTOp5en5g6RAHCP http://hackerkey.com/
More information about the Digitalmars-d-learn
mailing list