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
:)