On 23 April 2013 18:25, Iain Buclaw <ibuclaw@ubuntu.com> wrote:
On 23 April 2013 17:28, Johannes Pfau <nospam@example.com> wrote:
Am Tue, 23 Apr 2013 17:10:43 +0200
schrieb "Iain Buclaw" <ibuclaw@ubuntu.com>:

> In reference to this link:
> http://forum.dlang.org/post/50476C77.20608@googlemail.com
>
>
> I'm currently working on dealing with each of these issues in the
> following pull (with the intention to merge back upstream where
> required).
> https://github.com/D-Programming-GDC/GDC/pull/62
>
I'll make sure to have a look at this, but as always too little time...

> In order:
>
> 1. ClassInfo
>
> The initialiser emitted will have two symbols, one public symbol
> with the TypeInfo_Class members, and a second private generated
> symbol for the interfaces array.  I can't forsee any way this
> could break compatibility with any existing compilied gdc (or
> perhaps even dmd/ldc) binaries out there.

Sounds good. That should also be good for debug info.


Actually, found an interesting problem when confronting it.

---
struct Interface
{
    TypeInfo_Class   classinfo;
    void*[]     vtbl;
    ptrdiff_t   offset;     /// offset to Interface 'this' from Object 'this'  <--
}
---

I'll have to have a think about what value should be put there, and how best to put it in.



Or alternatively we could generate the type (for debugging) on the flying in ::toSymbol

1.  Module::toSymbol.

Type = Type::moduleinfo type.


2. ClassDeclaration::toSymbol

Type = Type::typeinfoclass type.

Then for each interface, add the fields for Type::interface onto the type.


3. InterfaceDeclaration::toSymbol

Likewise to above.


Regards
--
Iain Buclaw

*(p < e ? p++ : p) = (c & 0x0f) + '0';