Mercurial > projects > ddmd
diff dmd/ClassDeclaration.d @ 125:767a01c2a272
BaseClasses -> Vector
author | Eldar Insafutdinov <e.insafutdinov@gmail.com> |
---|---|
date | Fri, 03 Sep 2010 22:17:54 +0100 |
parents | e28b18c23469 |
children | 1765f3ef917d |
line wrap: on
line diff
--- a/dmd/ClassDeclaration.d Fri Sep 03 21:39:37 2010 +0400 +++ b/dmd/ClassDeclaration.d Fri Sep 03 22:17:54 2010 +0100 @@ -295,11 +295,11 @@ cd.storage_class |= storage_class; cd.baseclasses.setDim(this.baseclasses.dim); - for (int i = 0; i < cd.baseclasses.dim; i++) + for (size_t i = 0; i < cd.baseclasses.dim; i++) { - BaseClass b = cast(BaseClass)this.baseclasses.data[i]; - BaseClass b2 = new BaseClass(b.type.syntaxCopy(), b.protection); - cd.baseclasses.data[i] = cast(void*)b2; + auto b = this.baseclasses[i]; + auto b2 = new BaseClass(b.type.syntaxCopy(), b.protection); + cd.baseclasses[i] = b2; } ScopeDsymbol.syntaxCopy(cd); @@ -364,9 +364,9 @@ error("cannot create C++ classes"); // Expand any tuples in baseclasses[] - for (int i = 0; i < baseclasses.dim; ) + for (size_t i = 0; i < baseclasses.dim; ) { - BaseClass b = cast(BaseClass)baseclasses.data[i]; + auto b = baseclasses[i]; //printf("test1 %s %s\n", toChars(), b.type.toChars()); b.type = b.type.semantic(loc, sc); //printf("test2\n"); @@ -382,7 +382,7 @@ { Argument arg = Argument.getNth(tup.arguments, j); b = new BaseClass(arg.type, protection); - baseclasses.insert(i + j, cast(void*)b); + baseclasses.insert(i + j, b); } } else @@ -396,7 +396,7 @@ BaseClass b; Type tb; - b = cast(BaseClass)baseclasses.data[0]; + b = baseclasses[0]; //b.type = b.type.semantic(loc, sc); tb = b.type.toBasetype(); if (tb.ty != TY.Tclass) @@ -464,7 +464,7 @@ BaseClass b; Type tb; - b = cast(BaseClass)baseclasses.data[i]; + b = baseclasses[i]; b.type = b.type.semantic(loc, sc); tb = b.type.toBasetype(); if (tb.ty == TY.Tclass) @@ -493,7 +493,7 @@ // Check for duplicate interfaces for (size_t j = (baseClass ? 1 : 0); j < i; j++) { - BaseClass b2 = cast(BaseClass)baseclasses.data[j]; + auto b2 = baseclasses[j]; if (b2.base == tc.sym) error("inherits from duplicate interface %s", b2.base.toChars()); } @@ -538,7 +538,7 @@ } bt = tbase.semantic(loc, sc).toBasetype(); b = new BaseClass(bt, PROT.PROTpublic); - baseclasses.shift(cast(void*)b); + baseclasses.shift(b); assert(b.type.ty == TY.Tclass); tc = cast(TypeClass)(b.type); baseClass = tc.sym; @@ -547,7 +547,7 @@ } interfaces_dim = baseclasses.dim; - interfaces = cast(BaseClass*)baseclasses.data; + interfaces = baseclasses.ptr; if (baseClass) { @@ -764,9 +764,8 @@ } // Allocate instance of each new interface - for (int i = 0; i < vtblInterfaces.dim; i++) + foreach (b; vtblInterfaces) { - BaseClass b = cast(BaseClass)vtblInterfaces.data[i]; uint thissize = PTRSIZE; alignmember(structalign, thissize, &sc.offset); @@ -813,10 +812,8 @@ if (baseclasses.dim) buf.writestring(" : "); } - for (int i = 0; i < baseclasses.dim; i++) + foreach (size_t i, BaseClass b; baseclasses) { - BaseClass b = cast(BaseClass)baseclasses.data[i]; - if (i) buf.writeByte(','); //buf.writestring(b.base.ident.toChars()); @@ -848,10 +845,8 @@ if (!cd) return 0; //printf("ClassDeclaration::isBaseOf2(this = '%s', cd = '%s')\n", toChars(), cd.toChars()); - for (int i = 0; i < cd.baseclasses.dim; i++) + foreach (b; cd.baseclasses) { - BaseClass b = cast(BaseClass)cd.baseclasses.data[i]; - if (b.base is this || isBaseOf2(b.base)) return 1; } @@ -867,10 +862,8 @@ if (!cd) return 0; //printf("ClassDeclaration::isBaseOf2(this = '%s', cd = '%s')\n", toChars(), cd.toChars()); - for (int i = 0; i < cd.baseclasses.dim; i++) + foreach (b; cd.baseclasses) { - BaseClass b = cast(BaseClass)cd.baseclasses.data[i]; - if (b.base == this || isBaseOf2(b.base)) return 1; } @@ -905,10 +898,8 @@ int i; - for (i = 0; i < baseclasses.dim; i++) + foreach (b; baseclasses) { - BaseClass b = cast(BaseClass)baseclasses.data[i]; - if (b.base) { if (!b.base.symtab) @@ -1016,7 +1007,7 @@ if (b.base.isCPPinterface() && id) id.cpp = 1; - vtblInterfaces.push(cast(void*)b); + vtblInterfaces.push(b); b.copyBaseInterfaces(vtblInterfaces); } } @@ -1121,17 +1112,14 @@ else { PROT access; - int i; if (smember.isDeclaration().isStatic()) { access_ret = smember.prot(); } - for (i = 0; i < baseclasses.dim; i++) + foreach (b; baseclasses) { - BaseClass b = cast(BaseClass)baseclasses.data[i]; - access = b.base.getAccess(smember); switch (access) { @@ -1436,9 +1424,8 @@ // of the fixup (*) offset += vtblInterfaces.dim * (4 * PTRSIZE); - for (size_t i = 0; i < vtblInterfaces.dim; i++) + foreach (b; vtblInterfaces) { - BaseClass b = cast(BaseClass)vtblInterfaces.data[i]; ClassDeclaration id = b.base; /* The layout is: @@ -1466,9 +1453,8 @@ // Put out the vtblInterfaces.data[].vtbl[] // This must be mirrored with ClassDeclaration.baseVtblOffset() //printf("putting out %d interface vtbl[]s for '%s'\n", vtblInterfaces.dim, toChars()); - for (size_t i = 0; i < vtblInterfaces.dim; i++) + foreach (size_t i, BaseClass b; vtblInterfaces) { - BaseClass b = cast(BaseClass)vtblInterfaces.data[i]; ClassDeclaration id = b.base; int j; @@ -1517,10 +1503,8 @@ for (cd = this.baseClass; cd; cd = cd.baseClass) { - for (int k = 0; k < cd.vtblInterfaces.dim; k++) + foreach (size_t k, BaseClass bs; cd.vtblInterfaces) { - BaseClass bs = cast(BaseClass)cd.vtblInterfaces.data[k]; - if (bs.fillVtbl(this, bvtbl, 0)) { //printf("\toverriding vtbl[] for %s\n", bs.base.toChars()); @@ -1698,10 +1682,8 @@ csymoffset = CLASSINFO_SIZE; csymoffset += vtblInterfaces.dim * (4 * PTRSIZE); - for (size_t i = 0; i < vtblInterfaces.dim; i++) + foreach (b; vtblInterfaces) { - BaseClass b = cast(BaseClass)vtblInterfaces.data[i]; - if (b == bc) return csymoffset; csymoffset += b.base.vtbl.dim * PTRSIZE; @@ -1716,10 +1698,8 @@ for (cd = this.baseClass; cd; cd = cd.baseClass) { - for (int k = 0; k < cd.vtblInterfaces.dim; k++) + foreach(bs; cd.vtblInterfaces) { - BaseClass bs = cast(BaseClass)cd.vtblInterfaces.data[k]; - if (bs.fillVtbl(this, null, 0)) { if (bc == bs) @@ -1884,10 +1864,8 @@ // Interface vptr initializations toSymbol(); // define csym - for (size_t i = 0; i < vtblInterfaces.dim; i++) + foreach (b; vtblInterfaces) { - BaseClass b = cast(BaseClass)vtblInterfaces.data[i]; - /// version (1 || INTERFACE_VIRTUAL) { for (ClassDeclaration cd2 = cd; 1; cd2 = cd2.baseClass) {