Mercurial > projects > ddmd
diff dmd/StructLiteralExp.d @ 84:be2ab491772e
Expressions -> Vector!Expression
author | Eldar Insafutdinov <e.insafutdinov@gmail.com> |
---|---|
date | Mon, 30 Aug 2010 16:12:19 +0100 |
parents | 43073c7c7769 |
children | 8e69d041a99d |
line wrap: on
line diff
--- a/dmd/StructLiteralExp.d Mon Aug 30 18:42:04 2010 +0400 +++ b/dmd/StructLiteralExp.d Mon Aug 30 16:12:19 2010 +0100 @@ -76,19 +76,17 @@ return this; // Run semantic() on each element - for (size_t i = 0; i < elements.dim; i++) + foreach(size_t i, Expression e; elements) { - e = cast(Expression)elements.data[i]; if (!e) continue; e = e.semantic(sc); - elements.data[i] = cast(void*)e; + elements[i] = e; } expandTuples(elements); size_t offset = 0; - for (size_t i = 0; i < elements.dim; i++) + foreach(size_t i, Expression e; elements) { - e = cast(Expression)elements.data[i]; if (!e) continue; @@ -100,7 +98,7 @@ error("more initializers than fields of %s", sd.toChars()); return new ErrorExp(); } - Dsymbol s = sd.fields[i]; + auto s = sd.fields[i]; VarDeclaration v = s.isVarDeclaration(); assert(v); if (v.offset < offset) @@ -118,15 +116,14 @@ e = e.implicitCastTo(sc, telem); - elements.data[i] = cast(void*)e; + elements[i] = e; } /* Fill out remainder of elements[] with default initializers for fields[] */ for (size_t i = elements.dim; i < nfields; i++) { - Dsymbol s = sd.fields[i]; - VarDeclaration v = s.isVarDeclaration(); + VarDeclaration v = sd.fields[i]; assert(v); assert(!v.isThisDeclaration()); @@ -150,7 +147,7 @@ } offset = v.offset + cast(uint)v.type.size(); } - elements.push(cast(void*)e); + elements.push(e); } type = sd.type; @@ -241,9 +238,8 @@ * can spill over into the fields. */ size_t offset = 0; - foreach (Dsymbol s; sd.fields) + foreach (VarDeclaration v; sd.fields) { - VarDeclaration v = s.isVarDeclaration(); assert(v); e = el_combine(e, fillHole(stmp, &offset, v.offset, sd.structsize)); @@ -258,14 +254,12 @@ { dim = elements.dim; assert(dim <= sd.fields.dim); - for (size_t i = 0; i < dim; i++) + foreach (size_t i, Expression el; elements) { - Expression el = cast(Expression)elements.data[i]; if (!el) continue; - Dsymbol s = sd.fields[i]; - VarDeclaration v = s.isVarDeclaration(); + VarDeclaration v = sd.fields[i]; assert(v); assert(!v.isThisDeclaration()); @@ -359,8 +353,8 @@ if (sd.isnested) { // Initialize the hidden 'this' pointer assert(sd.fields.dim); - Dsymbol s = sd.fields[sd.fields.dim - 1]; - ThisDeclaration v = s.isThisDeclaration(); + auto s = sd.fields[sd.fields.dim - 1]; + auto v = s.isThisDeclaration(); assert(v); elem* e1; @@ -437,13 +431,12 @@ { if (elements) { - for (size_t i = 0; i < elements.dim; i++) + foreach (size_t i, Expression e; elements) { - Expression e = cast(Expression)elements.data[i]; if (!e) continue; e = e.optimize(WANTvalue | (result & WANTinterpret)); - elements.data[i] = cast(void*)e; + elements[i] = e; } } return this; @@ -492,9 +485,8 @@ if (type.ty == t.ty && type.ty == Tstruct && (cast(TypeStruct)type).sym == (cast(TypeStruct)t).sym) { m = MATCHconst; - for (int i = 0; i < elements.dim; i++) + foreach(e; elements) { - Expression e = cast(Expression)elements.data[i]; Type te = e.type; if (t.mod == 0) te = te.mutableOf();