Manual delegates

Guillaume Piolat spam at smam.org
Mon Sep 17 13:59:00 UTC 2018


On Sunday, 16 September 2018 at 14:45:08 UTC, Vladimir Panteleev 
wrote:
> On Sunday, 16 September 2018 at 14:12:27 UTC, Guillaume Piolat 
> wrote:
>> Anyone has any information about the ABI of delegates?
>>
>> In particular how to call them with a particular "this"/frame 
>> pointer?
>>
>> To solve a hairy problem I need a delegate with a synthesized 
>> frame pointer.
>> https://dpaste.dzfl.pl/cf44417c98f9
>>
>> The problem is that delegate forwarding seems to require GC 
>> closures. I want manually-managed closures.
>
> Have a look at the implementation of toDelegate, which does 
> exactly this:
>
> https://github.com/dlang/phobos/blob/v2.082.0/std/functional.d#L1463

Thanks.

I ended up using toDelegate internally, and enclosing the 
resulting delegate with code returning a struct with `opCall`.

The conclusion is that "struct with `opCall`" is much easier to 
implement that faking delegate ABI, this is less brittle ; and 
doesn't add a lifetime of a trampoline context to extend the 
input delegate.


More information about the Digitalmars-d-learn mailing list