In reference to this link:
http://forum.dlang.org/post/50476c77.20...@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

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.


2. TypeInfoStruct

Likewise to the above.


3. ModuleInfo

We can get the correct type as is defined in object.di through Module::moduleinfo, this would mean that all generated moduleinfo symbols will be the same size (rather than be of a variable size) padded out with zeros at the end. However, this requires a front-end patch to store it as there is an implementation conflict because of MODULEINFO_IS_STRUCT macro, the type is a StructDeclaration (Module::moduleinfo is a ClassDeclaration type).

Going one step further, the type itself could probably be put up for a clean up. Removing the struct New/Old implementation (keeping the 'New' for getting data members) and perhaps replace it something like the following.

struct ModuleInfo
{
  uint flags;           // Module flags
  uint index;           // Index into moduleinfo array
  void*[14] reserved;   // Padding large enough to contain
// all optional data added depending on flags.
}

This however is not really required, but am just throughing it out there as a thought.


Any thoughts on this?  (Looking at you Johannes).

Regards
Iain

Reply via email to