Mercurial > projects > ldc
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;