Cannot implicitly convert delegate to function

Lionello Lunesu lio at lunesu.remove.com
Thu Apr 27 11:36:18 PDT 2006


BCS wrote:
> In article <e2qlrk$1uh5$1 at digitaldaemon.com>, Jarrett Billingsley says...
>> "Lionello Lunesu" <lio at lunesu.remove.com> wrote in message 
>> news:e2qig4$1ovk$1 at digitaldaemon.com...
>>> Hi,
>>>
>>> Shouldn't a (pointer to a) function be convertible to a delegate? Seems to 
>>> me it's like casting an int to a long; the latter has "more info" and can 
>>> be converted back into the former without the loss of data. The same holds 
>>> for function/delegate: a function could be converted to a delegate for 
>>> "null"; by forgetting the "this" (null), we get the function pointer back.
>> Without the context pointer, a delegate cannot function properly.  So 
>> casting from delegate to function isn't really possible.
>>
>> The other way around.. I don't think so either.  Something tells me the 
>> mechanism for a delegate call would screw up if the context pointer were 
>> null, or if the function weren't designed to be a delegate. 
>>
>>
> 
> It would take some ASM hacking but It might be possible to place the fn ptr in
> the context pointer and have the delegate's function rearrange the stack and
> then call (with tail recursion) the function.

Isn't "this" basically a hidden parameter? A delegate would be a "this" 
together with a function pointer. Upon calling it would first load/push 
the hidden parameter before the call to the function.

The question then is: does "this" interfere with a function's parameter?

If, like in the MSVC case, "this" is always loaded into register ecx, it 
would just work: ecx would get "null" and the function gets called with 
the usual parameters. Since the function does not access [ecx] (it's a 
function, not a member of any class) the null would not interfere.

L.



More information about the Digitalmars-d-learn mailing list