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();