changeset 77:ad4792a1cfd6

more D-ification container accessing
author Eldar Insafutdinov <e.insafutdinov@gmail.com>
date Sun, 29 Aug 2010 14:36:55 +0100
parents 7e0d548de9e6
children b98fa8a4bf04
files dmd/AddrExp.d dmd/AggregateDeclaration.d dmd/AnonDeclaration.d dmd/Array.d dmd/AttribDeclaration.d dmd/CallExp.d dmd/ClassDeclaration.d dmd/ConditionalDeclaration.d dmd/DeclarationExp.d dmd/EnumDeclaration.d dmd/FuncDeclaration.d dmd/InterfaceDeclaration.d dmd/LinkDeclaration.d dmd/Module.d dmd/Parser.d dmd/PragmaDeclaration.d dmd/ScopeDsymbol.d dmd/StaticIfDeclaration.d dmd/StructDeclaration.d dmd/SwitchStatement.d dmd/TemplateInstance.d dmd/TemplateMixin.d dmd/VarDeclaration.d dmd/codegen/Util.d
diffstat 24 files changed, 124 insertions(+), 229 deletions(-) [+]
line wrap: on
line diff
--- a/dmd/AddrExp.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/AddrExp.d	Sun Aug 29 14:36:55 2010 +0100
@@ -162,9 +162,8 @@
 			{   
 				OverExp eo = cast(OverExp)e1;
 				FuncDeclaration f = null;
-				for (int i = 0; i < eo.vars.a.dim; i++)
+				foreach(Dsymbol s; eo.vars.a)
 				{   
-					Dsymbol s = cast(Dsymbol)eo.vars.a.data[i];
 					FuncDeclaration f2 = s.isFuncDeclaration();
 					assert(f2);
 					if (f2.overloadExactMatch(t.nextOf()))
@@ -221,9 +220,8 @@
 			{   
 				OverExp eo = cast(OverExp)e1;
 				FuncDeclaration f = null;
-				for (int i = 0; i < eo.vars.a.dim; i++)
+				foreach(Dsymbol s; eo.vars.a)
 				{   
-					Dsymbol s = cast(Dsymbol)eo.vars.a.data[i];
 					FuncDeclaration f2 = s.isFuncDeclaration();
 					assert(f2);
 					if (f2.overloadExactMatch(t.nextOf()))
--- a/dmd/AggregateDeclaration.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/AggregateDeclaration.d	Sun Aug 29 14:36:55 2010 +0100
@@ -198,11 +198,8 @@
 		if (members)
 		{
 			sc = sc.push(this);
-			for (size_t i = 0; i < members.dim; i++)
-			{
-				Dsymbol s = cast(Dsymbol)members.data[i];
+			foreach(Dsymbol s; members)
 				s.semantic2(sc);
-			}
 			sc.pop();
 		}
 	}
@@ -215,11 +212,8 @@
 		if (members)
 		{
 			sc = sc.push(this);
-			for (i = 0; i < members.dim; i++)
-			{
-				Dsymbol s = cast(Dsymbol)members.data[i];
+			foreach(Dsymbol s; members)
 				s.semantic3(sc);
-			}
 			sc.pop();
 		}
 	}
@@ -231,9 +225,8 @@
 		//printf("AggregateDeclaration.inlineScan(%s)\n", toChars());
 		if (members)
 		{
-			for (i = 0; i < members.dim; i++)
+			foreach(Dsymbol s; members)
 			{
-				Dsymbol s = cast(Dsymbol)members.data[i];
 				//printf("inline scan aggregate symbol '%s'\n", s.toChars());
 				s.inlineScan();
 			}
@@ -417,19 +410,18 @@
 				return null;
 
 			case 1:
-				return cast(FuncDeclaration)dtors.data[0];
+				return cast(FuncDeclaration)dtors[0];
 
 			default:
 				e = null;
-				for (size_t i = 0; i < dtors.dim; i++)
+				foreach(FuncDeclaration fd; dtors)
 				{
-					FuncDeclaration fd = cast(FuncDeclaration)dtors.data[i];
 					Expression ex = new ThisExp(Loc(0));
 					ex = new DotVarExp(Loc(0), ex, fd, 0);
 					ex = new CallExp(Loc(0), ex);
 					e = Expression.combine(ex, e);
 				}
-				DtorDeclaration dd = new DtorDeclaration(Loc(0), Loc(0), Lexer.idPool("__aggrDtor"));
+				auto dd = new DtorDeclaration(Loc(0), Loc(0), Lexer.idPool("__aggrDtor"));
 				dd.fbody = new ExpStatement(Loc(0), e);
 				members.push(dd);
 				dd.semantic(sc);
--- a/dmd/AnonDeclaration.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/AnonDeclaration.d	Sun Aug 29 14:36:55 2010 +0100
@@ -83,10 +83,8 @@
 			aad.structalign = sc.structalign;
 			aad.parent = ad;
 
-			for (uint i = 0; i < decl.dim; i++)
+			foreach(Dsymbol s; decl)
 			{
-				Dsymbol s = cast(Dsymbol)decl.data[i];
-
 				s.semantic(sc);
 				if (isunion)
 					sc.offset = 0;
--- a/dmd/Array.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/Array.d	Sun Aug 29 14:36:55 2010 +0100
@@ -184,27 +184,38 @@
 class Vector(T)
 {
 public:
-    @property final uint dim()
+    @property final size_t dim()
     {
         return _dim;
     }
-    
+
+    @property final size_t length() const
+    {
+        return _dim;
+    }
+/* Doesn't work due to compiler BUG
+    @property final size_t opDollar() const
+    {
+        return _dim;
+    }    
+*/
+/*    
     @property T *data()
     {
         return _data;
     }
-    
-    @property final uint allocdim()
+*/    
+    @property final size_t allocdim()
     {
         return _allocdim;
     }
     
-    T opIndex(uint index)
+    T opIndex(size_t index)
     {
         return _data[index];
     }
     
-    void opIndexAssign(T value, uint index)
+    void opIndexAssign(T value, size_t index)
     {
         _data[index] = value;
     }
@@ -222,7 +233,7 @@
         _data[_dim++] = elem;
     }
     
-    final void reserve(uint nentries)
+    final void reserve(size_t nentries)
 	{
         //printf("Array::reserve: size = %d, offset = %d, nbytes = %d\n", size, offset, nbytes);
         if (allocdim - dim < nentries) {
@@ -252,7 +263,7 @@
 		return a;
 	}
     
-    final void setDim(uint newdim)
+    final void setDim(size_t newdim)
 	{
 		if (dim < newdim) {
 			reserve(newdim - dim);
@@ -265,7 +276,7 @@
     {
         int result = 0;
 
-	    for (int i = 0; i < _dim; i++)
+	    for (size_t i = 0; i < _dim; i++)
 	    {
     	    result = dg(_data[i]);
 	        if (result)
@@ -274,10 +285,10 @@
 	    return result;
     }
 
-    int opApply(scope int delegate(ref int key, ref T value) dg)
+    int opApply(scope int delegate(ref size_t key, ref T value) dg)
     {
         int result = 0;
-        for (int i = 0; i < _dim; i++)
+        for (size_t i = 0; i < _dim; i++)
         {
             result = dg(i, _data[i]);
             if(result)
@@ -291,7 +302,7 @@
 		insert(dim, a);
 	}
     
-    final void insert(uint index, Vector!T a)
+    final void insert(size_t index, Vector!T a)
 	{
 		if (a !is null) {
 			uint d = a.dim;
@@ -307,6 +318,6 @@
 	}
 private:
     T* _data = null;
-    uint _dim = 0;
-    uint _allocdim = 0;
+    size_t _dim = 0;
+    size_t _allocdim = 0;
 }
\ No newline at end of file
--- a/dmd/AttribDeclaration.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/AttribDeclaration.d	Sun Aug 29 14:36:55 2010 +0100
@@ -34,12 +34,6 @@
 		{
             foreach(s; d)
                 m |= s.addMember(sc, sd, m | memnum);
-/*			for (uint i = 0; i < d.dim; i++)
-			{   
-				auto s = d[i];
-				m |= s.addMember(sc, sd, m | memnum);
-			}
-            */
 		}
 
 		return m;
@@ -63,11 +57,8 @@
 				newsc.explicitProtection = explicitProtection;
 				newsc.structalign = structalign;
 			}
-			for (uint i = 0; i < decl.dim; i++)
-			{   
-				Dsymbol s = cast(Dsymbol)decl.data[i];
+			foreach(Dsymbol s; decl)
 				s.setScope(newsc);	// yes, the only difference from semanticNewSc()
-			}
 			if (newsc != sc)
 			{
 				sc.offset = newsc.offset;
@@ -94,11 +85,8 @@
 				newsc.explicitProtection = explicitProtection;
 				newsc.structalign = structalign;
 			}
-			for (uint i = 0; i < decl.dim; i++)
-			{   
-				Dsymbol s = cast(Dsymbol)decl.data[i];
+			foreach(Dsymbol s; decl)
 				s.semantic(newsc);
-			}
 			if (newsc != sc)
 			{
 				sc.offset = newsc.offset;
--- a/dmd/CallExp.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/CallExp.d	Sun Aug 29 14:36:55 2010 +0100
@@ -613,9 +613,8 @@
 		{
 			OverExp eo = cast(OverExp)e1;
 			FuncDeclaration ff = null;
-			for (int j = 0; j < eo.vars.a.dim; j++)
+			foreach(Dsymbol s; eo.vars.a)
 			{   
-				Dsymbol s = cast(Dsymbol)eo.vars.a.data[j];
 				FuncDeclaration f2 = s.isFuncDeclaration();
 				if (f2)
 				{
@@ -643,7 +642,7 @@
 				/* No overload matches, just set ff and rely on error
 				 * message being generated later.
 				 */
-				ff = cast(FuncDeclaration)eo.vars.a.data[0];
+				ff = cast(FuncDeclaration)eo.vars.a[0];
 			}
 			e1 = new VarExp(loc, ff);
 			goto Lagain;
--- a/dmd/ClassDeclaration.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/ClassDeclaration.d	Sun Aug 29 14:36:55 2010 +0100
@@ -581,11 +581,8 @@
 		{
 		interfaceSemantic(sc);
 
-		for (i = 0; i < members.dim; i++)
-		{
-			Dsymbol s = cast(Dsymbol)members.data[i];
+		foreach(Dsymbol s; members)
 			s.addMember(sc, this, true);
-		}
 
 		/* If this is a nested class, add the hidden 'this'
 		 * member which is a pointer to the enclosing scope.
@@ -695,11 +692,8 @@
 		Scope scsave = sc;	/// a copy must be created?
 		int members_dim = members.dim;
 		sizeok = 0;
-		for (i = 0; i < members_dim; i++)
-		{
-			Dsymbol s = cast(Dsymbol)members.data[i];
+		foreach(Dsymbol s; members)
 			s.semantic(sc);
-		}
 
 		if (sizeok == 2)
 		{	// semantic() failed because of forward references.
@@ -833,10 +827,8 @@
 			buf.writenl();
 			buf.writeByte('{');
 			buf.writenl();
-			for (int i = 0; i < members.dim; i++)
+			foreach(Dsymbol s; members)
 			{
-				Dsymbol s = cast(Dsymbol)members.data[i];
-
 				buf.writestring("    ");
 				s.toCBuffer(buf, hgs);
 			}
@@ -955,9 +947,8 @@
 		OverloadSet os = s.isOverloadSet();	
 		if (os)
 		{
-			for (int i = 0; i < os.a.dim; i++)
+			foreach(Dsymbol s2; os.a)
 			{   
-				Dsymbol s2 = cast(Dsymbol)os.a.data[i];
 				FuncDeclaration f2 = s2.isFuncDeclaration();
 				if (f2 && overloadApply(f2, &p.isf, &p))
 					return false;
@@ -1212,13 +1203,8 @@
 			scclass = SCcomdat;
 
 		// Put out the members
-		for (i = 0; i < members.dim; i++)
-		{
-			Dsymbol member;
-
-			member = cast(Dsymbol)members.data[i];
+		foreach(Dsymbol member; members)
 			member.toObjFile(0);
-		}
 
 static if (false) {
 		// Build destructor by aggregating dtors[]
@@ -1405,9 +1391,8 @@
 		{
 			if (cd.members)
 			{
-				for (size_t j = 0; j < cd.members.dim; j++)
+				foreach(Dsymbol sm; cd.members)
 				{
-					Dsymbol sm = cast(Dsymbol)cd.members.data[j];
 					//printf("sm = %s %s\n", sm.kind(), sm.toChars());
 					if (sm.hasPointers())
 						goto L2;
--- a/dmd/ConditionalDeclaration.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/ConditionalDeclaration.d	Sun Aug 29 14:36:55 2010 +0100
@@ -107,10 +107,8 @@
 	buf.writenl();
 	if (decl)
 	{
-	    for (uint i = 0; i < decl.dim; i++)
+	    foreach (Dsymbol s; decl)
 	    {
-		Dsymbol s = cast(Dsymbol)decl.data[i];
-
 		buf.writestring("    ");
 		s.toCBuffer(buf, hgs);
 	    }
@@ -123,10 +121,8 @@
 	    buf.writenl();
 	    buf.writeByte('{');
 	    buf.writenl();
-	    for (uint i = 0; i < elsedecl.dim; i++)
+	    foreach (Dsymbol s; elsedecl)
 	    {
-		Dsymbol s = cast(Dsymbol)elsedecl.data[i];
-
 		buf.writestring("    ");
 		s.toCBuffer(buf, hgs);
 	    }
--- a/dmd/DeclarationExp.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/DeclarationExp.d	Sun Aug 29 14:36:55 2010 +0100
@@ -59,7 +59,7 @@
 		if (ad)
 		{
 			if (ad.decl && ad.decl.dim == 1)
-				s = cast(Dsymbol)ad.decl.data[0];
+				s = ad.decl[0];
 		}
 
 		if (s.isVarDeclaration())
--- a/dmd/EnumDeclaration.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/EnumDeclaration.d	Sun Aug 29 14:36:55 2010 +0100
@@ -161,9 +161,9 @@
 		error("enum %s must have at least one member", toChars());
 		int first = 1;
 		Expression elast = null;
-		for (int i = 0; i < members.dim; i++)
+		foreach (Dsymbol s; members)
 		{
-		EnumMember em = (cast(Dsymbol)members.data[i]).isEnumMember();
+		EnumMember em = s.isEnumMember();
 		Expression e;
 
 		if (!em)
@@ -326,9 +326,9 @@
 	    buf.writenl();
 	    buf.writeByte('{');
 	    buf.writenl();
-	    for (i = 0; i < members.dim; i++)
+	    foreach(Dsymbol s; members)
 	    {
-		EnumMember em = (cast(Dsymbol)members.data[i]).isEnumMember();
+		EnumMember em = s.isEnumMember();
 		if (!em)
 		    continue;
 		//buf.writestring("    ");
--- a/dmd/FuncDeclaration.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/FuncDeclaration.d	Sun Aug 29 14:36:55 2010 +0100
@@ -1313,9 +1313,8 @@
 			}
 			else
 			{
-				for (int i = 0; i < add.members.dim; i++)
-				{   Dsymbol s = cast(Dsymbol)add.members.data[i];
-
+				foreach (Dsymbol s; add.members)
+				{
 				s.checkCtorConstInit();
 				}
 			}
@@ -1419,9 +1418,9 @@
 
 			// Merge in initialization of 'out' parameters
 			if (parameters)
-			{	for (size_t i = 0; i < parameters.dim; i++)
+			{	foreach (Dsymbol s; parameters)
 			{
-				VarDeclaration v = cast(VarDeclaration)parameters.data[i];
+				auto v = cast(VarDeclaration)s;
 				if (v.storage_class & STC.STCout)
 				{
 				assert(v.init);
@@ -1445,7 +1444,7 @@
 
 				Expression e1 = new VarExp(Loc(0), argptr);
 				if (parameters && parameters.dim)
-					p = cast(VarDeclaration)parameters.data[parameters.dim - 1];
+					p = cast(VarDeclaration)parameters[parameters.length - 1];
 				else
 					p = v_arguments;		// last parameter is _arguments[]
 				if (p.storage_class & STClazy)
@@ -1557,9 +1556,9 @@
 			/* Append destructor calls for parameters as finally blocks.
 			 */
 			if (parameters)
-			{	for (size_t i = 0; i < parameters.dim; i++)
+			{	foreach(Dsymbol symb; parameters)
 			{
-				VarDeclaration v = cast(VarDeclaration)parameters.data[i];
+				auto v = cast(VarDeclaration)symb;
 
 				if (v.storage_class & (STC.STCref | STC.STCout))
 				continue;
@@ -2386,7 +2385,7 @@
 			{   
 				Expression earg = cast(Expression)eargs.data[i];
 				Argument arg = Argument.getNth(tf.parameters, i);
-				VarDeclaration v = cast(VarDeclaration)parameters.data[i];
+				auto v = cast(VarDeclaration)parameters[i];
 				vsave.data[i] = cast(void*)v.value;
 version (LOG) {
 				printf("arg[%d] = %s\n", i, earg.toChars());
@@ -2432,12 +2431,12 @@
 					/* Don't restore the value of v2 upon function return
 					 */
 					assert(istate);
-					for (size_t j = 0; j < istate.vars.dim; j++)
+					foreach(size_t j, Dsymbol s2; istate.vars)// (size_t j = 0; j < istate.vars.dim; j++)
 					{   
-						VarDeclaration vd = cast(VarDeclaration)istate.vars.data[j];
+						auto vd = cast(VarDeclaration)s2;
 						if (vd == v2)
 						{	
-							istate.vars.data[j] = null;
+							istate.vars[j] = null;
 							break;
 						}
 					}
@@ -2455,12 +2454,12 @@
 		// Don't restore the value of 'this' upon function return
 		if (needThis() && thisarg.op==TOKvar) {
 			VarDeclaration thisvar = (cast(VarExp)thisarg).var.isVarDeclaration();
-			for (size_t i = 0; i < istate.vars.dim; i++)
+ 			foreach (size_t i, Dsymbol s; istate.vars)
 			{   
-				VarDeclaration v = cast(VarDeclaration)istate.vars.data[i];
+				auto v = cast(VarDeclaration)s;
 				if (v == thisvar)
 				{	
-					istate.vars.data[i] = null;
+					istate.vars[i] = null;
 					break;
 				}
 			}
@@ -2473,10 +2472,9 @@
 		{
 			//printf("saving local variables...\n");
 			valueSaves.setDim(istate.vars.dim);
-			for (size_t i = 0; i < istate.vars.dim; i++)
+			foreach (size_t i, Dsymbol s3; istate.vars)
 			{   
-				VarDeclaration v = cast(VarDeclaration)istate.vars.data[i];
-				if (v)
+				if (auto v = cast(VarDeclaration)s3)
 				{
 					//printf("\tsaving [%d] %s = %s\n", i, v.toChars(), v.value ? v.value.toChars() : "");
 					valueSaves.data[i] = cast(void*)v.value;
@@ -2515,7 +2513,7 @@
 		 */
 		for (size_t i = 0; i < dim; i++)
 		{
-			VarDeclaration v = cast(VarDeclaration)parameters.data[i];
+			auto v = cast(VarDeclaration)parameters[i];
 			v.value = cast(Expression)vsave.data[i];
 		}
 
@@ -2524,10 +2522,9 @@
 			/* Restore the variable values
 			 */
 			//printf("restoring local variables...\n");
-			for (size_t i = 0; i < istate.vars.dim; i++)
+			foreach (size_t i , Dsymbol s3; istate.vars)
 			{   
-				VarDeclaration v = cast(VarDeclaration)istate.vars.data[i];
-				if (v)
+				if (auto v = cast(VarDeclaration)s3)
 				{	
 					v.value = cast(Expression)valueSaves.data[i];
 					//printf("\trestoring [%d] %s = %s\n", i, v.toChars(), v.value ? v.value.toChars() : "");
@@ -2646,9 +2643,9 @@
 		 */
 		if (parameters)
 		{
-			for (int i = 0; i < parameters.dim; i++)
+			foreach (Dsymbol s3; parameters)
 			{
-				VarDeclaration v = cast(VarDeclaration)parameters.data[i];
+				auto v = cast(VarDeclaration)s3;
 				if (v.isOut() || v.isRef() || v.type.toBasetype().ty == Tsarray)
 					goto Lno;
 			}
@@ -2764,7 +2761,7 @@
 
 			for (int i = 0; i < arguments.dim; i++)
 			{
-				VarDeclaration vfrom = cast(VarDeclaration)parameters.data[i];
+				auto vfrom = cast(VarDeclaration)parameters[i];
 				VarDeclaration vto;
 				Expression arg = cast(Expression)arguments.data[i];
 				ExpInitializer ei;
@@ -2845,14 +2842,14 @@
 		 */
 
 		//printf("FuncDeclaration.needsClosure() %s\n", toChars());
-		for (int i = 0; i < closureVars.dim; i++)
+		foreach (Dsymbol s3; closureVars)
 		{	
-			VarDeclaration v = cast(VarDeclaration)closureVars.data[i];
+			auto v = cast(VarDeclaration)s3;
 			assert(v.isVarDeclaration());
 			//printf("\tv = %s\n", v.toChars());
 
-			for (int j = 0; j < v.nestedrefs.dim; j++)
-			{   FuncDeclaration f = cast(FuncDeclaration)v.nestedrefs.data[j];
+			foreach(FuncDeclaration f; v.nestedrefs)
+			{
 				assert(f != this);
 
 				//printf("\t\tf = %s, %d, %p, %d\n", f.toChars(), f.isVirtual(), f.isThis(), f.tookAddressOf);
@@ -2899,9 +2896,8 @@
 		 *     a stack local, allocate that local immediately following the exception
 		 *     handler block, so it is always at the same offset from EBP.
 		 */
-		for (int i = 0; i < foverrides.dim; i++)
+		foreach(FuncDeclaration fdv; foverrides) //(int i = 0; i < foverrides.dim; i++)
 		{
-			FuncDeclaration fdv = cast(FuncDeclaration)foverrides.data[i];
 			sf = fdv.mergeFrequire(sf);
 			if (fdv.frequire)
 			{
@@ -2944,9 +2940,8 @@
 		 * list for the 'this' pointer, something that would need an unknown amount
 		 * of tweaking of various parts of the compiler that I'd rather leave alone.
 		 */
-		for (int i = 0; i < foverrides.dim; i++)
+		foreach (FuncDeclaration fdv; foverrides)
 		{
-			FuncDeclaration fdv = cast(FuncDeclaration)foverrides.data[i];
 			sf = fdv.mergeFensure(sf);
 			if (fdv.fensure)
 			{
@@ -3345,9 +3340,9 @@
 		}
 		if (parameters)
 		{
-			for (i = 0; i < parameters.dim; i++)
+			foreach (size_t i, Dsymbol s3; parameters)
 			{   
-				VarDeclaration v = cast(VarDeclaration)parameters.data[i];
+				auto v = cast(VarDeclaration)s3;
 debug {
 				if (v.csym)
 					writef("parameter '%s'\n", v.toChars());
@@ -3642,9 +3637,9 @@
 			irs.sclosure = sclosure;
 
 			uint offset = PTRSIZE;	// leave room for previous sthis
-			for (int i = 0; i < closureVars.dim; i++)
+			foreach (Dsymbol s3; closureVars)
 			{   
-				VarDeclaration v = cast(VarDeclaration)closureVars.data[i];
+				auto v = cast(VarDeclaration)s3;
 				assert(v.isVarDeclaration());
 
 		version (DMDV2) {
@@ -3709,8 +3704,8 @@
 			e = el_combine(e, ex);
 
 			// Copy function parameters into closure
-			for (int i = 0; i < closureVars.dim; i++)
-			{   VarDeclaration v = cast(VarDeclaration)closureVars.data[i];
+			foreach (Dsymbol s3; closureVars)
+			{   auto v = cast(VarDeclaration)s3;
 
 				if (!v.isParameter())
 					continue;
--- a/dmd/InterfaceDeclaration.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/InterfaceDeclaration.d	Sun Aug 29 14:36:55 2010 +0100
@@ -222,11 +222,8 @@
 		protection = sc.protection;
 		storage_class |= sc.stc & STC.STC_TYPECTOR;
 
-		for (i = 0; i < members.dim; i++)
-		{
-			Dsymbol s = cast(Dsymbol)members.data[i];
+		foreach(Dsymbol s; members)
 			s.addMember(sc, this, true);
-		}
 
 		sc = sc.push(this);
 		sc.stc &= ~(STC.STCfinal | STC.STCauto | STC.STCscope | STC.STCstatic |
@@ -241,11 +238,8 @@
 		structalign = sc.structalign;
 		sc.offset = PTRSIZE * 2;
 		inuse++;
-		for (i = 0; i < members.dim; i++)
-		{
-			Dsymbol s = cast(Dsymbol)members.data[i];
+		foreach(Dsymbol s; members)
 			s.semantic(sc);
-		}
 		inuse--;
 		//members.print();
 		sc.pop();
@@ -368,11 +362,8 @@
 			scclass = SCcomdat;
 
 		// Put out the members
-		for (i = 0; i < members.dim; i++)
+		foreach(Dsymbol member; members)
 		{
-			Dsymbol member;
-
-			member = cast(Dsymbol)members.data[i];
 			if (!member.isFuncDeclaration())
 				member.toObjFile(0);
 		}
--- a/dmd/LinkDeclaration.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/LinkDeclaration.d	Sun Aug 29 14:36:55 2010 +0100
@@ -50,11 +50,8 @@
 			LINK linkage_save = sc.linkage;
 
 			sc.linkage = linkage;
-			for (uint i = 0; i < decl.dim; i++)
-			{
-				Dsymbol s = cast(Dsymbol)decl.data[i];
+			foreach(Dsymbol s; decl)
 				s.semantic3(sc);
-			}
 			sc.linkage = linkage_save;
 		}
 		else
--- a/dmd/Module.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/Module.d	Sun Aug 29 14:36:55 2010 +0100
@@ -709,17 +709,12 @@
 		 * If this works out well, it can be extended to all modules
 		 * before any semantic() on any of them.
 		 */
-		for (i = 0; i < members.dim; i++)
-		{	
-			Dsymbol s = cast(Dsymbol)members.data[i];
+		foreach(Dsymbol s; members)
 			s.setScope(sc);
-		}
 
 		// Pass 1 semantic routines: do public side of the definition
-		for (i = 0; i < members.dim; i++)
+		foreach (Dsymbol s; members)
 		{	
-			Dsymbol s = cast(Dsymbol)members.data[i];
-
 			//writef("\tModule('%s'): '%s'.semantic()\n", toChars(), s.toChars());
 			s.semantic(sc);
 			runDeferredSemantic();
@@ -756,11 +751,8 @@
 		//printf("Module = %p\n", sc.scopesym);
 
 		// Pass 2 semantic routines: do initializers and function bodies
-		for (int i = 0; i < members.dim; i++)
-		{	
-			Dsymbol s = cast(Dsymbol)members.data[i];
+		foreach(Dsymbol s; members)
 			s.semantic2(sc);
-		}
 
 		sc = sc.pop();
 		sc.pop();
@@ -783,9 +775,8 @@
 		//printf("Module = %p\n", sc.scopesym);
 
 		// Pass 3 semantic routines: do initializers and function bodies
-		for (int i = 0; i < members.dim; i++)
+		foreach(Dsymbol s; members)
 		{	
-			Dsymbol s = cast(Dsymbol)members.data[i];
 			//printf("Module %s: %s.semantic3()\n", toChars(), s.toChars());
 			s.semantic3(sc);
 		}
@@ -810,9 +801,8 @@
 		// gets imported, it is unaffected by context.
 		//printf("Module = %p\n", sc.scopesym);
 
-		for (i = 0; i < members.dim; i++)
+		foreach(Dsymbol s; members)
 		{	
-			Dsymbol s = cast(Dsymbol)members.data[i];
 			//if (global.params.verbose)
 				//printf("inline scan symbol %s\n", s.toChars());
 			s.inlineScan();
@@ -931,11 +921,8 @@
 			covb = cast(uint*)GC.calloc(((numlines + 32) / 32) * (*covb).sizeof);
 		}
 		
-		for (int i = 0; i < members.dim; i++)
-		{
-			Dsymbol member = cast(Dsymbol)members.data[i];
+		foreach(Dsymbol member; members)
 			member.toObjFile(multiobj);
-		}
 		
 		if (global.params.cov)
 		{
@@ -1470,10 +1457,8 @@
 		ClassDeclarations aclasses = new ClassDeclarations();
 
 		//printf("members.dim = %d\n", members.dim);
-		for (int i = 0; i < members.dim; i++)
+		foreach(Dsymbol member; members)
 		{	
-			Dsymbol member = cast(Dsymbol)members.data[i];
-
 			//printf("\tmember '%s'\n", member.toChars());
 			member.addLocalClass(aclasses);
 		}
--- a/dmd/Parser.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/Parser.d	Sun Aug 29 14:36:55 2010 +0100
@@ -3218,9 +3218,8 @@
 			{
 			Statements as = new Statements();
 			as.reserve(a.dim);
-			for (int i = 0; i < a.dim; i++)
+			foreach(Dsymbol d; a)
 			{
-				Dsymbol d = cast(Dsymbol)a.data[i];
 				s = new DeclarationStatement(loc, d);
 				as.push(cast(void*)s);
 			}
@@ -3228,7 +3227,7 @@
 			}
 			else if (a.dim == 1)
 			{
-				Dsymbol d = cast(Dsymbol)a.data[0];
+				auto d = a[0];
 			s = new DeclarationStatement(loc, d);
 			}
 			else
--- a/dmd/PragmaDeclaration.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/PragmaDeclaration.d	Sun Aug 29 14:36:55 2010 +0100
@@ -181,11 +181,8 @@
 
 		if (decl)
 		{
-			for (uint i = 0; i < decl.dim; i++)
-			{
-				Dsymbol s = cast(Dsymbol)decl.data[i];
+			foreach(Dsymbol s; decl)
 				s.semantic(sc);
-			}
 		}
 		return;
 
--- a/dmd/ScopeDsymbol.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/ScopeDsymbol.d	Sun Aug 29 14:36:55 2010 +0100
@@ -115,7 +115,7 @@
 						a = new OverloadSet();
 						/* Don't add to a[] if s2 is alias of previous sym
 						 */
-						foreach (int j, Dsymbol s3; a.a)
+						foreach (size_t j, Dsymbol s3; a.a)
 						{	
 							if (s2.toAlias() == s3.toAlias())
 							{
--- a/dmd/StaticIfDeclaration.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/StaticIfDeclaration.d	Sun Aug 29 14:36:55 2010 +0100
@@ -68,12 +68,8 @@
 				addisdone = 1;
 			}
 
-			for (uint i = 0; i < d.dim; i++)
-			{
-				Dsymbol s = cast(Dsymbol)d.data[i];
-
+			foreach(Dsymbol s; d)
 				s.semantic(sc);
-			}
 		}
 	}
 
--- a/dmd/StructDeclaration.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/StructDeclaration.d	Sun Aug 29 14:36:55 2010 +0100
@@ -148,9 +148,8 @@
 		if (sizeok == 0)		// if not already done the addMember step
 		{
 		int hasfunctions = 0;
-		for (i = 0; i < members.dim; i++)
+		foreach(Dsymbol s; members)
 		{
-			Dsymbol s = cast(Dsymbol)members.data[i];
 			//printf("adding member '%s' to '%s'\n", s.toChars(), this.toChars());
 			s.addMember(sc, this, true);
 			if (s.isFuncDeclaration())
@@ -202,9 +201,8 @@
 		sc2.explicitProtection = 0;
 
 		int members_dim = members.dim;
-		for (i = 0; i < members_dim; i++)
+		foreach(Dsymbol s; members)
 		{
-		Dsymbol s = cast(Dsymbol)members.data[i];
 		s.semantic(sc2);
 		if (isUnionDeclaration())
 			sc2.offset = 0;
@@ -615,12 +613,12 @@
 			return null;
 
 		case 1:
-			return cast(FuncDeclaration)postblits.data[0];
+			return cast(FuncDeclaration)postblits[0];
 
 		default:
 			e = null;
-			for (size_t i = 0; i < postblits.dim; i++)
-			{	FuncDeclaration fd = cast(FuncDeclaration)postblits.data[i];
+			foreach(FuncDeclaration fd; postblits)
+			{
 			Expression ex = new ThisExp(Loc(0));
 			ex = new DotVarExp(Loc(0), ex, fd, 0);
 			ex = new CallExp(Loc(0), ex);
@@ -781,11 +779,8 @@
 			}
 
 			// Put out the members
-			for (uint i = 0; i < members.dim; i++)
-			{
-				Dsymbol member = cast(Dsymbol)members.data[i];
+			foreach(Dsymbol member; members)
 				member.toObjFile(0);
-			}
 		}
 	}
 	
--- a/dmd/SwitchStatement.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/SwitchStatement.d	Sun Aug 29 14:36:55 2010 +0100
@@ -189,10 +189,9 @@
 				EnumDeclaration ed = te.toDsymbol(sc).isEnumDeclaration();
 				assert(ed);
 				size_t dim = ed.members.dim;
-				for (size_t i = 0; i < dim; i++)
+				foreach (Dsymbol s; ed.members)
 				{
-					EnumMember em = (cast(Dsymbol)ed.members.data[i]).isEnumMember();
-					if (em)
+					if (auto em = s.isEnumMember())
 					{
 						for (size_t j = 0; j < cases.dim; j++)
 						{   
--- a/dmd/TemplateInstance.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/TemplateInstance.d	Sun Aug 29 14:36:55 2010 +0100
@@ -479,9 +479,8 @@
 	//    parent = scope.scopesym;
 		symtab = new DsymbolTable();
 		bool memnum = false;
-		for (int i = 0; i < members.dim; i++)
+		foreach(Dsymbol s; members)
 		{
-			Dsymbol s = cast(Dsymbol)members.data[i];
 	version (LOG) {
 			printf("\t[%d] adding member '%s' %p kind %s to '%s', memnum = %d\n", i, s.toChars(), s, s.kind(), this.toChars(), memnum);
 	}
@@ -533,9 +532,8 @@
 				error("recursive expansion");
 				fatal();
 			}
-			for (int i = 0; i < members.dim; i++)
+			foreach(Dsymbol s; members)
 			{
-				Dsymbol s = cast(Dsymbol)members.data[i];
 				//printf("\t[%d] semantic on '%s' %p kind %s in '%s'\n", i, s.toChars(), s, s.kind(), this.toChars());
 				//printf("test: isnested = %d, sc2.parent = %s\n", isnested, sc2.parent.toChars());
 				//	if (isnested)
@@ -627,9 +625,8 @@
 			sc = sc.push(this);
 			sc.tinst = this;
 
-			for (i = 0; i < members.dim; i++)
+			foreach(Dsymbol s; members)
 			{
-				Dsymbol s = cast(Dsymbol)members.data[i];
 	version (LOG) {
 				printf("\tmember '%s', kind = '%s'\n", s.toChars(), s.kind());
 	}
@@ -660,11 +657,8 @@
 			sc = sc.push(argsym);
 			sc = sc.push(this);
 			sc.tinst = this;
-			for (int i = 0; i < members.dim; i++)
-			{
-				Dsymbol s = cast(Dsymbol)members.data[i];
+			foreach(Dsymbol s; members)
 				s.semantic3(sc);
-			}
 			sc = sc.pop();
 			sc.pop();
 		}
@@ -677,11 +671,8 @@
 	}
 		if (!errors && members)
 		{
-			for (int i = 0; i < members.dim; i++)
-			{
-				Dsymbol s = cast(Dsymbol)members.data[i];
+			foreach(Dsymbol s; members)
 				s.inlineScan();
-			}
 		}
 	}
 	
@@ -798,11 +789,8 @@
 				obj_append(this);
 			else
 			{
-				for (int i = 0; i < members.dim; i++)
-				{
-					Dsymbol s = cast(Dsymbol)members.data[i];
+				foreach(Dsymbol s; members)
 					s.toObjFile(multiobj);
-				}
 			}
 		}
 	}
--- a/dmd/TemplateMixin.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/TemplateMixin.d	Sun Aug 29 14:36:55 2010 +0100
@@ -274,10 +274,8 @@
 		declareParameters(argscope);
 
 		// Add members to enclosing scope, as well as this scope
-		for (uint i = 0; i < members.dim; i++)
-		{   Dsymbol s;
-
-			s = cast(Dsymbol)members.data[i];
+		foreach(size_t i, Dsymbol s; members)
+		{
 			s.addMember(argscope, this, cast(bool)i);
 			//sc.insert(s);
 			//printf("sc.parent = %p, sc.scopesym = %p\n", sc.parent, sc.scopesym);
@@ -302,11 +300,8 @@
 			fatal();
 		}
 
-		for (int i = 0; i < members.dim; i++)
-		{
-			Dsymbol s = cast(Dsymbol)members.data[i];
+		foreach(Dsymbol s; members)
 			s.semantic(sc2);
-		}
 
 		nest--;
 
@@ -359,9 +354,8 @@
 			assert(sc);
 			sc = sc.push(argsym);
 			sc = sc.push(this);
-			for (i = 0; i < members.dim; i++)
+			foreach(Dsymbol s; members)
 			{
-				Dsymbol s = cast(Dsymbol)members.data[i];
 				version (LOG) {
 					printf("\tmember '%s', kind = '%s'\n", s.toChars(), s.kind());
 				}
@@ -389,11 +383,8 @@
 		{
 			sc = sc.push(argsym);
 			sc = sc.push(this);
-			for (i = 0; i < members.dim; i++)
-			{
-				Dsymbol s = cast(Dsymbol)members.data[i];
+			foreach(Dsymbol s; members)
 				s.semantic3(sc);
-			}
 			sc = sc.pop();
 			sc.pop();
 		}
@@ -417,9 +408,8 @@
 	override bool hasPointers()
 	{
 		//printf("TemplateMixin.hasPointers() %s\n", toChars());
-		for (size_t i = 0; i < members.dim; i++)
+		foreach(Dsymbol s; members)
 		{
-			Dsymbol s = cast(Dsymbol)members.data[i];
 			//printf(" s = %s %s\n", s.kind(), s.toChars());
 			if (s.hasPointers())
 			{
--- a/dmd/VarDeclaration.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/VarDeclaration.d	Sun Aug 29 14:36:55 2010 +0100
@@ -964,9 +964,8 @@
 				if (loc.filename)
 					fdthis.getLevel(loc, fdv);
 
-				for (int i = 0; i < nestedrefs.dim; i++)
+				foreach(FuncDeclaration f; nestedrefs)
 				{	
-					FuncDeclaration f = cast(FuncDeclaration)nestedrefs.data[i];
 					if (f == fdthis)
 						goto L1;
 				}
--- a/dmd/codegen/Util.d	Sun Aug 29 09:43:40 2010 +0100
+++ b/dmd/codegen/Util.d	Sun Aug 29 14:36:55 2010 +0100
@@ -708,18 +708,15 @@
 		//printf("%s\n", tm.toChars());
 		if (tm.members)
 		{
-			for (size_t i = 0; i < tm.members.dim; i++)
-			{
-				Dsymbol sm = cast(Dsymbol)tm.members.data[i];
+			foreach(Dsymbol sm; tm.members)
 				e = el_combine(e, Dsymbol_toElem(sm, irs));
-			}
 		}
     }
     else if ((td = s.isTupleDeclaration()) !is null)
     {
 		for (size_t i = 0; i < td.objects.dim; i++)
 		{   
-			Object o = cast(Object)td.objects.data[i];
+			auto o = cast(Object)td.objects.data[i];
 			///if (o.dyncast() == DYNCAST_EXPRESSION)
 			if (Expression eo = cast(Expression)o)
 			{