comparison dmd/class.c @ 809:69a5e4a6fc0f

Changed some hardcoded offset/alignment for classes in DMD, broke offsets for 64bits. Changed ClassInfo generation to no longer access the default initializer of ClassInfo, fixes problems with index mismatch.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Sun, 30 Nov 2008 20:22:09 +0100
parents 50383e476c7e
children 330f999ade44
comparison
equal deleted inserted replaced
808:4ad1e7b10378 809:69a5e4a6fc0f
549 alignsize = baseClass->alignsize; 549 alignsize = baseClass->alignsize;
550 // if (isnested) 550 // if (isnested)
551 // sc->offset += PTRSIZE; // room for uplevel context pointer 551 // sc->offset += PTRSIZE; // room for uplevel context pointer
552 } 552 }
553 else 553 else
554 { sc->offset = 8; // allow room for vptr[] and monitor 554 { sc->offset = 2*PTRSIZE; // allow room for vptr[] and monitor
555 alignsize = 4; 555 alignsize = PTRSIZE;
556 } 556 }
557 structsize = sc->offset; 557 structsize = sc->offset;
558 Scope scsave = *sc; 558 Scope scsave = *sc;
559 int members_dim = members->dim; 559 int members_dim = members->dim;
560 sizeok = 0; 560 sizeok = 0;
1137 sc->parent = this; 1137 sc->parent = this;
1138 if (isCOMinterface()) 1138 if (isCOMinterface())
1139 sc->linkage = LINKwindows; 1139 sc->linkage = LINKwindows;
1140 sc->structalign = 8; 1140 sc->structalign = 8;
1141 structalign = sc->structalign; 1141 structalign = sc->structalign;
1142 sc->offset = 8; 1142 sc->offset = 2*PTRSIZE;
1143 inuse++; 1143 inuse++;
1144 for (i = 0; i < members->dim; i++) 1144 for (i = 0; i < members->dim; i++)
1145 { 1145 {
1146 Dsymbol *s = (Dsymbol *)members->data[i]; 1146 Dsymbol *s = (Dsymbol *)members->data[i];
1147 s->semantic(sc); 1147 s->semantic(sc);