Mercurial > projects > ddmd
changeset 125:767a01c2a272
BaseClasses -> Vector
author | Eldar Insafutdinov <e.insafutdinov@gmail.com> |
---|---|
date | Fri, 03 Sep 2010 22:17:54 +0100 |
parents | 731ab26f07bf |
children | 1765f3ef917d |
files | dmd/AggregateDeclaration.d dmd/ArrayTypes.d dmd/BaseClass.d dmd/ClassDeclaration.d dmd/InterfaceDeclaration.d dmd/IsExp.d dmd/Parser.d |
diffstat | 7 files changed, 39 insertions(+), 66 deletions(-) [+] |
line wrap: on
line diff
--- a/dmd/AggregateDeclaration.d Fri Sep 03 21:39:37 2010 +0400 +++ b/dmd/AggregateDeclaration.d Fri Sep 03 22:17:54 2010 +0100 @@ -109,9 +109,8 @@ ClassDeclaration cdthis = dthis.isClassDeclaration(); if (cdthis) { - for (int i = 0; i < cdthis.baseclasses.dim; i++) + foreach (b; cdthis.baseclasses) { - BaseClass b = cast(BaseClass)cdthis.baseclasses.data[i]; PROT access = b.base.getAccess(smember); if (access >= PROT.PROTprotected || accessCheckX(smember, sfunc, b.base, cdscope)) @@ -127,10 +126,8 @@ ClassDeclaration cdthis = dthis.isClassDeclaration(); if (cdthis) { - for (int i = 0; i < cdthis.baseclasses.dim; i++) + foreach (b; cdthis.baseclasses) { - BaseClass b = cast(BaseClass)cdthis.baseclasses.data[i]; - if (accessCheckX(smember, sfunc, b.base, cdscope)) return true; }
--- a/dmd/ArrayTypes.d Fri Sep 03 21:39:37 2010 +0400 +++ b/dmd/ArrayTypes.d Fri Sep 03 22:17:54 2010 +0100 @@ -4,12 +4,12 @@ import dmd.Array; import dmd.TemplateParameter; import dmd.Statement; +import dmd.BaseClass; alias Vector!Object Objects; alias Vector!TemplateParameter TemplateParameters; alias Vector!Statement Statements; - -class BaseClasses : Array { final typeof(this) copy() { auto a = new typeof(this); copyTo(a); return a; } } +alias Vector!BaseClass BaseClasses; class ClassDeclarations : Array { final typeof(this) copy() { auto a = new typeof(this); copyTo(a); return a; } }
--- a/dmd/BaseClass.d Fri Sep 03 21:39:37 2010 +0400 +++ b/dmd/BaseClass.d Fri Sep 03 22:17:54 2010 +0100 @@ -133,7 +133,7 @@ baseInterfaces[i] = b; if (i) // single inheritance is i==0 - vtblInterfaces.push(cast(void*)b); // only need for M.I. + vtblInterfaces.push(b); // only need for M.I. b.copyBaseInterfaces(vtblInterfaces); } //printf("-copyBaseInterfaces\n");
--- 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) {
--- a/dmd/InterfaceDeclaration.d Fri Sep 03 21:39:37 2010 +0400 +++ b/dmd/InterfaceDeclaration.d Fri Sep 03 22:17:54 2010 +0100 @@ -104,7 +104,7 @@ // Expand any tuples in baseclasses[] for (size_t i = 0; i < baseclasses.dim; ) { - BaseClass b = cast(BaseClass)baseclasses.data[0]; + auto b = baseclasses[0]; b.type = b.type.semantic(loc, sc); Type tb = b.type.toBasetype(); @@ -116,7 +116,7 @@ for (size_t j = 0; j < dim; j++) { 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 @@ -133,7 +133,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) @@ -151,7 +151,7 @@ // Check for duplicate interfaces for (size_t j = 0; j < i; j++) { - BaseClass b2 = cast(BaseClass)baseclasses.data[j]; + auto b2 = baseclasses[j]; if (b2.base is tc.sym) error("inherits from duplicate interface %s", b2.base.toChars()); } @@ -188,7 +188,7 @@ } interfaces_dim = baseclasses.dim; - interfaces = cast(BaseClass*)baseclasses.data; + interfaces = baseclasses.ptr; interfaceSemantic(sc); @@ -480,9 +480,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; // ClassInfo
--- a/dmd/IsExp.d Fri Sep 03 21:39:37 2010 +0400 +++ b/dmd/IsExp.d Fri Sep 03 22:17:54 2010 +0100 @@ -166,9 +166,8 @@ { ClassDeclaration cd = (cast(TypeClass)targ).sym; Arguments args = new Arguments; args.reserve(cd.baseclasses.dim); - for (size_t i = 0; i < cd.baseclasses.dim; i++) + foreach (b; cd.baseclasses) { - BaseClass b = cast(BaseClass)cd.baseclasses.data[i]; args.push(cast(void*)new Argument(STCin, b.type, null, null)); } tded = new TypeTuple(args);
--- a/dmd/Parser.d Fri Sep 03 21:39:37 2010 +0400 +++ b/dmd/Parser.d Fri Sep 03 22:17:54 2010 +0100 @@ -2146,8 +2146,8 @@ } if (token.value == TOK.TOKidentifier) { - BaseClass b = new BaseClass(parseBasicType(), protection); - baseclasses.push(cast(void*)b); + auto b = new BaseClass(parseBasicType(), protection); + baseclasses.push(b); if (token.value != TOK.TOKcomma) break; }