diff gen/structs.cpp @ 737:041c1596d217

Removed warnings on ignored aligns. Only do aligment on packed structs, align(1) struct Packed { ... } Changed the way struct/class fields are added, first small part of cleaning up these... Make struct/class/union fields aware of any anonymous struct/union they might be part of, not yet really useful, but part of getting better union support.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Tue, 28 Oct 2008 15:41:09 +0100
parents 3e143b611c1e
children 6e7a4c3b64d2
line wrap: on
line diff
--- a/gen/structs.cpp	Mon Oct 27 17:42:38 2008 +0100
+++ b/gen/structs.cpp	Tue Oct 28 15:41:09 2008 +0100
@@ -92,7 +92,7 @@
     TypeStruct* ts = (TypeStruct*)sd->type->toBasetype();
 
     // this struct is a forward declaration
-    // didn't even know had those ...
+    // didn't even know D had those ...
     if (sd->sizeok != 1)
     {
         sd->ir.irStruct = new IrStruct(ts);
@@ -102,10 +102,21 @@
 
     bool ispacked = (ts->alignsize() == 1);
 
+    // create the IrStruct
     IrStruct* irstruct = new IrStruct(ts);
     sd->ir.irStruct = irstruct;
     gIR->structs.push_back(irstruct);
 
+    // add fields
+    Array* fields = &sd->fields;
+    for (int k=0; k < fields->dim; k++)
+    {
+        VarDeclaration* v = (VarDeclaration*)fields->data[k];
+        Logger::println("Adding field: %s %s", v->type->toChars(), v->toChars());
+        // init fields, used to happen in VarDeclaration::toObjFile
+        irstruct->addField(v);
+    }
+
     irstruct->packed = ispacked;
 
     bool thisModule = false;