diff dmd/AssocArrayLiteralExp.d @ 90:39648eb578f6

more Expressions work
author Eldar Insafutdinov <e.insafutdinov@gmail.com>
date Mon, 30 Aug 2010 20:27:56 +0100
parents be2ab491772e
children 6da99741178e
line wrap: on
line diff
--- a/dmd/AssocArrayLiteralExp.d	Mon Aug 30 19:58:14 2010 +0400
+++ b/dmd/AssocArrayLiteralExp.d	Mon Aug 30 20:27:56 2010 +0100
@@ -59,14 +59,14 @@
 
 		// Run semantic() on each element
 		for (size_t i = 0; i < keys.dim; i++)
-		{	Expression key = cast(Expression)keys.data[i];
-			Expression value = cast(Expression)values.data[i];
+		{	auto key = keys[i];
+			auto value = values[i];
 
 			key = key.semantic(sc);
 			value = value.semantic(sc);
 
-			keys.data[i] = key;
-			values.data[i] = value;
+			keys[i] = key;
+			values[i] = value;
 		}
 		expandTuples(keys);
 		expandTuples(values);
@@ -77,8 +77,8 @@
 			values.setDim(0);
 		}
 		for (size_t i = 0; i < keys.dim; i++)
-		{	Expression key = cast(Expression)keys.data[i];
-			Expression value = cast(Expression)values.data[i];
+		{	auto key = keys[i];
+			auto value = values[i];
 
 			if (!key.type)
 				error("%s has no value", key.toChars());
@@ -91,13 +91,13 @@
 				tkey = key.type;
 			else
 				key = key.implicitCastTo(sc, tkey);
-			keys.data[i] = key;
+			keys[i] = key;
 
 			if (!tvalue)
 				tvalue = value.type;
 			else
 				value = value.implicitCastTo(sc, tvalue);
-			values.data[i] = value;
+			values[i] = value;
 		}
 
 		if (!tkey)
@@ -125,7 +125,7 @@
 		e = el_long(TYint, dim);
 		for (size_t i = 0; i < dim; i++)
 		{   
-			Expression el = cast(Expression)keys.data[i];
+			auto el = keys[i];
 
 			for (int j = 0; j < 2; j++)
 			{
@@ -139,13 +139,13 @@
 		//printf("[%d] %s\n", i, el.toChars());
 		//elem_print(ep);
 				e = el_param(ep, e);
-				el = cast(Expression)values.data[i];
+				el = values[i];
 			}
 		}
 
 		Type t = type.toBasetype().mutableOf();
 		assert(t.ty == Taarray);
-		TypeAArray ta = cast(TypeAArray)t;
+		auto ta = cast(TypeAArray)t;
 
 		/* Unfortunately, the hash function for Aa (array of chars) is custom and
 		 * different from Axa and Aya, which get the generic hash function.
@@ -175,8 +175,8 @@
 		bool f = false;
 
 		for (size_t i = 0; i < keys.dim; i++)
-		{	Expression key = cast(Expression)keys.data[i];
-			Expression value = cast(Expression)values.data[i];
+		{	auto key = keys[i];
+			auto value = values[i];
 
 			f |= key.checkSideEffect(2);
 			f |= value.checkSideEffect(2);
@@ -190,8 +190,8 @@
 	{
 		buf.writeByte('[');
 		for (size_t i = 0; i < keys.dim; i++)
-		{	Expression key = cast(Expression)keys.data[i];
-			Expression value = cast(Expression)values.data[i];
+		{	auto key = keys[i];
+			auto value = values[i];
 
 			if (i)
 				buf.writeByte(',');
@@ -207,8 +207,8 @@
 		size_t dim = keys.dim;
 		buf.printf("A%u", dim);
 		for (size_t i = 0; i < dim; i++)
-		{	Expression key = cast(Expression)keys.data[i];
-			Expression value = cast(Expression)values.data[i];
+		{	auto key = keys[i];
+			auto value = values[i];
 
 			key.toMangleBuffer(buf);
 			value.toMangleBuffer(buf);
@@ -223,16 +223,14 @@
 	override Expression optimize(int result)
 	{
 		assert(keys.dim == values.dim);
-		for (size_t i = 0; i < keys.dim; i++)
+		foreach (size_t i, Expression e; keys)
 		{   
-			Expression e = cast(Expression)keys.data[i];
-
 			e = e.optimize(WANTvalue | (result & WANTinterpret));
-			keys.data[i] = e;
+			keys[i] = e;
 
-			e = cast(Expression)values.data[i];
+			e = values[i];
 			e = e.optimize(WANTvalue | (result & WANTinterpret));
-			values.data[i] = e;
+			values[i] = e;
 		}
 		return this;
 	}
@@ -247,8 +245,8 @@
 }
 		for (size_t i = 0; i < keys.dim; i++)
 		{   
-			Expression ekey = cast(Expression)keys.data[i];
-			Expression evalue = cast(Expression)values.data[i];
+			auto ekey = keys[i];
+			auto evalue = values[i];
 			Expression ex;
 
 			ex = ekey.interpret(istate);
@@ -261,7 +259,7 @@
 			{
 				if (keysx == keys)
 					keysx = cast(Expressions)keys.copy();
-				keysx.data[i] = ex;
+				keysx[i] = ex;
 			}
 
 			ex = evalue.interpret(istate);
@@ -274,7 +272,7 @@
 			{
 				if (valuesx == values)
 				valuesx = values.copy();
-				valuesx.data[i] = ex;
+				valuesx[i] = ex;
 			}
 		}
 		
@@ -289,11 +287,11 @@
 		 */
 		for (size_t i = 1; i < keysx.dim; i++)
 		{   
-			Expression ekey = cast(Expression)keysx.data[i - 1];
+			auto ekey = keysx[i - 1];
 
 			for (size_t j = i; j < keysx.dim; j++)
 			{   
-				Expression ekey2 = cast(Expression)keysx.data[j];
+				auto ekey2 = keysx[j];
 				Expression ex = Equal(TOKequal, Type.tbool, ekey, ekey2);
 				if (ex is EXP_CANT_INTERPRET)
 					goto Lerr;
@@ -339,13 +337,13 @@
 		{
 			for (size_t i = 0; i < keys.dim; i++)
 			{   
-				Expression e = cast(Expression)keys.data[i];
-				MATCH m = cast(MATCH)e.implicitConvTo((cast(TypeAArray)tb).index);
+				auto e = keys[i];
+				auto m = cast(MATCH)e.implicitConvTo((cast(TypeAArray)tb).index);
 				if (m < result)
 					result = m;			// remember worst match
 				if (result == MATCHnomatch)
 					break;				// no need to check for worse
-				e = cast(Expression)values.data[i];
+				e = values[i];
 				m = cast(MATCH)e.implicitConvTo(tb.nextOf());
 				if (m < result)
 					result = m;			// remember worst match
@@ -373,13 +371,13 @@
 			assert(keys.dim == values.dim);
 			for (size_t i = 0; i < keys.dim; i++)
 			{   
-				Expression ex = cast(Expression)values.data[i];
+				auto ex = values[i];
 				ex = ex.castTo(sc, tb.nextOf());
-				e.values.data[i] = ex;
+				e.values[i] = ex;
 
-				ex = cast(Expression)keys.data[i];
+				ex = keys[i];
 				ex = ex.castTo(sc, (cast(TypeAArray)tb).index);
-				e.keys.data[i] = ex;
+				e.keys[i] = ex;
 			}
 			e.type = t;
 			return e;