diff dmd/SliceExp.d @ 130:60bb0fe4563e

dmdfe 2.037 first main iteration
author Eldar Insafutdinov <e.insafutdinov@gmail.com>
date Thu, 09 Sep 2010 22:51:44 +0100
parents 1765f3ef917d
children af1bebfd96a4
line wrap: on
line diff
--- a/dmd/SliceExp.d	Sun Sep 05 15:32:22 2010 +0400
+++ b/dmd/SliceExp.d	Thu Sep 09 22:51:44 2010 +0100
@@ -31,7 +31,7 @@
 import dmd.VarDeclaration;
 import dmd.ErrorExp;
 import dmd.TypeExp;
-import dmd.Argument;
+import dmd.Parameter;
 import dmd.ExpInitializer;
 import dmd.IRState;
 import dmd.InlineDoState;
@@ -200,7 +200,7 @@
 			else if (e1.op == TOKtype)	// slicing a type tuple
 			{   
 				tup = cast(TypeTuple)t;
-				length = Argument.dim(tup.arguments);
+				length = Parameter.dim(tup.arguments);
 			}
 			else
 				assert(0);
@@ -223,11 +223,11 @@
 				}
 				else
 				{	
-					auto args = new Arguments;
+					auto args = new Parameters;
 					args.reserve(j2 - j1);
 					for (size_t i = j1; i < j2; i++)
 					{   
-						auto arg = Argument.getNth(tup.arguments, i);
+						auto arg = Parameter.getNth(tup.arguments, i);
 						args.push(arg);
 					}
 					e = new TypeExp(e1.loc, new TypeTuple(args));
@@ -379,36 +379,26 @@
 
 	override elem* toElem(IRState* irs)
 	{
-		elem* e;
-		Type t1;
-
 		//printf("SliceExp.toElem()\n");
-		t1 = e1.type.toBasetype();
-		e = e1.toElem(irs);
+		auto t1 = e1.type.toBasetype();
+		auto e = e1.toElem(irs);
 		if (lwr)
 		{
-			elem* elwr;
-			elem* elwr2;
-			elem* eupr;
-			elem* eptr;
-			elem* einit;
-			int sz;
+			auto einit = resolveLengthVar(lengthVar, &e, t1);
+
+			int sz = cast(uint)t1.nextOf().size();
 
-			einit = resolveLengthVar(lengthVar, &e, t1);
-
-			sz = cast(uint)t1.nextOf().size();
+			auto elwr = lwr.toElem(irs);
+			auto eupr = upr.toElem(irs);
 
-			elwr = lwr.toElem(irs);
-			eupr = upr.toElem(irs);
-
-			elwr2 = el_same(&elwr);
+			auto elwr2 = el_same(&elwr);
 
 			// Create an array reference where:
 			// length is (upr - lwr)
 			// pointer is (ptr + lwr*sz)
 			// Combine as (length pair ptr)
 
-			if (global.params.useArrayBounds)
+			if (irs.arrayBoundsCheck())
 			{
 				// Checks (unsigned compares):
 				//	upr <= array.length
@@ -470,7 +460,7 @@
 				}
 			}
 
-			eptr = array_toPtr(e1.type, e);
+			auto eptr = array_toPtr(e1.type, e);
 
 			elem *elength = el_bin(OPmin, TYint, eupr, elwr2);
 			eptr = el_bin(OPadd, TYnptr, eptr, el_bin(OPmul, TYint, el_copytree(elwr2), el_long(TYint, sz)));
@@ -509,10 +499,10 @@
 		arguments.shift(this);
 	}
 
-	override Expression buildArrayLoop(Arguments fparams)
+	override Expression buildArrayLoop(Parameters fparams)
 	{
 		Identifier id = Identifier.generateId("p", fparams.dim);
-		auto param = new Argument(STCconst, type, id, null);
+		auto param = new Parameter(STCconst, type, id, null);
 		fparams.shift(param);
 		Expression e = new IdentifierExp(Loc(0), id);
 		Expressions arguments = new Expressions();