On Thursday, 1 January 2015 at 22:49:40 UTC, Basile Burg wrote:
On Thursday, 1 January 2015 at 21:15:27 UTC, Ali Çehreli wrote:
On 01/01/2015 09:35 AM, Basile Burg wrote:

> On Tuesday, 30 December 2014 at 19:18:41 UTC, Basile Burg
wrote:

> an ICE (every
> compiler crash is an ICE right ?),

Yes, the compiler should never crash but produce an error message. Please report it preferably with a reduced code sample:

The report is filed. I was not sure of its validity or if it could be a dup.

-----------------

You realize, all of those foreach'es are processed at compile-time for code generation. There will be no 'o' at run time; so its address cannot be used.

Instead, Can I get the *relative offset* of a particular member at compile-time ?
Then at run-time I could easily define the delegate, eg:

// the AA or some arrays filled at compile-time
ptrdiff_t[string] gettersOffset;
ptrdiff_t[string] settersOffset;

// a delegate, set at run-time, for example in this().
myDelegate.funcptr = gettersOffset["propIdentifier"];
myDelegate.ptr = cast(void*) this;

If so then the problem is solved...even if other problems could appends, for example if the methods are final, if they are inlined...

Actually I'd be surprised that nobody has already designed something similar for properties (kind of "published" attribute as defined in Pascal-like languages.)

This was the way to go (the relative-offset "thing"):

1/ __traits(getVirtualIndex,...) works at compile time
2/ then the method pointer can be constructed using vtbl

And it works, though I'm still open to another solution (since now the get/set >>must<< be virtual)

Current implementation:

https://github.com/BBasile/Iz/blob/master/import/iz/properties.d#L383

:)

Reply via email to