changeset 121:347de076ad34

TemplateParameters -> Vector
author Eldar Insafutdinov <e.insafutdinov@gmail.com>
date Thu, 02 Sep 2010 22:41:12 +0100
parents 46ef67271ef3
children c77e9f4f1793
files dmd/Array.d dmd/ArrayTypes.d dmd/IsExp.d dmd/Parser.d dmd/TemplateDeclaration.d dmd/TemplateInstance.d dmd/TemplateParameter.d dmd/Type.d dmd/TypeInstance.d dmd/TypeSArray.d
diffstat 10 files changed, 39 insertions(+), 44 deletions(-) [+]
line wrap: on
line diff
--- a/dmd/Array.d	Thu Sep 02 20:19:14 2010 +0100
+++ b/dmd/Array.d	Thu Sep 02 22:41:12 2010 +0100
@@ -205,12 +205,14 @@
         return _dim;
     }    
 */
-
+/* 
+	// Use [] for accessing members instead
+	// or ptr() to get the pointer to the first element
     @property T *data()
     {
         return _data;
     }
-
+*/
     @property T *ptr()
     {
         return _data;
--- a/dmd/ArrayTypes.d	Thu Sep 02 20:19:14 2010 +0100
+++ b/dmd/ArrayTypes.d	Thu Sep 02 22:41:12 2010 +0100
@@ -2,10 +2,10 @@
 
 import dmd.common;
 import dmd.Array;
+import dmd.TemplateParameter;
 
 alias Vector!Object Objects;
-
-class TemplateParameters : Array { final typeof(this) copy() { auto a = new typeof(this); copyTo(a); return a; } }
+alias Vector!TemplateParameter TemplateParameters;
 
 class Statements : Array { final typeof(this) copy() { auto a = new typeof(this); copyTo(a); return a; } }
 
--- a/dmd/IsExp.d	Thu Sep 02 20:19:14 2010 +0100
+++ b/dmd/IsExp.d	Thu Sep 02 22:41:12 2010 +0100
@@ -65,8 +65,8 @@
 			p.setDim(parameters.dim);
 			for (int i = 0; i < p.dim; i++)
 			{   
-				TemplateParameter tp = cast(TemplateParameter)parameters.data[i];
-				p.data[i] = cast(void*)tp.syntaxCopy();
+				auto tp = parameters[i];
+				p[i] = tp.syntaxCopy();
 			}
 		}
 
@@ -266,7 +266,7 @@
 				 */
 				for (int i = 1; i < parameters.dim; i++)
 				{	
-					TemplateParameter tp = cast(TemplateParameter)parameters.data[i];
+					auto tp = parameters[i];
 					Declaration s = null;
 
 					m = tp.matchArg(sc, tiargs, i, parameters, dedtypes, &s);
@@ -359,7 +359,7 @@
 			for (int i = 1; i < parameters.dim; i++)
 			{
 				buf.writeByte(',');
-				TemplateParameter tp = cast(TemplateParameter)parameters.data[i];
+				auto tp = parameters[i];
 				tp.toCBuffer(buf, hgs);
 			}
 		}
--- a/dmd/Parser.d	Thu Sep 02 20:19:14 2010 +0100
+++ b/dmd/Parser.d	Thu Sep 02 22:41:12 2010 +0100
@@ -1069,7 +1069,7 @@
 					}
 					tp = new TemplateValueParameter(loc, tp_ident, tp_valtype, tp_specvalue, tp_defaultvalue);
 				}
-				tpl.push(cast(void*)tp);
+				tpl.push(tp);
 				if (token.value != TOKcomma)
 					break;
 				nextToken();
@@ -1238,10 +1238,10 @@
 									param.ident = pt.ident;
 									Identifier id = Lexer.uniqueId("__T");
 									param.type = new TypeIdentifier(pt.loc, id);
-									TemplateParameter tp = new TemplateTypeParameter(fd.loc, id, null, null);
+									auto tp = new TemplateTypeParameter(fd.loc, id, null, null);
 									if (!tpl)
 										tpl = new TemplateParameters();
-									tpl.push(cast(void*)tp);
+									tpl.push(tp);
 								}
 							}
 
@@ -5196,7 +5196,7 @@
 					check(TOK.TOKrparen);
 					}
 					TemplateParameter tp = new TemplateTypeParameter(loc2, ident, null, null);
-					tpl.insert(0, cast(void*)tp);
+					tpl.insert(0, tp);
 				}
 				else
 					check(TOK.TOKrparen);
--- a/dmd/TemplateDeclaration.d	Thu Sep 02 20:19:14 2010 +0100
+++ b/dmd/TemplateDeclaration.d	Thu Sep 02 22:41:12 2010 +0100
@@ -57,7 +57,7 @@
 	TemplateTupleParameter tp = null;
 
 	if (dim)
-		tp = (cast(TemplateParameter)parameters.data[dim - 1]).isTemplateTupleParameter();
+		tp = parameters[dim - 1].isTemplateTupleParameter();
 
 	return tp;
 }
@@ -165,8 +165,8 @@
 			p.setDim(parameters.dim);
 			for (int i = 0; i < p.dim; i++)
 			{   
-				TemplateParameter tp = cast(TemplateParameter)parameters.data[i];
-				p.data[i] = cast(void*)tp.syntaxCopy();
+				auto tp = parameters[i];
+				p[i] = tp.syntaxCopy();
 			}
 		}
 		
@@ -228,23 +228,19 @@
 		{
 			origParameters = new TemplateParameters();
 			origParameters.setDim(parameters.dim);
-			for (int i = 0; i < parameters.dim; i++)
+			foreach (size_t i, TemplateParameter tp; parameters)
 			{
-				TemplateParameter tp = cast(TemplateParameter)parameters.data[i];
-				origParameters.data[i] = cast(void*)tp.syntaxCopy();
+				origParameters[i] = tp.syntaxCopy();
 			}
 		}
 
-		for (int i = 0; i < parameters.dim; i++)
+		foreach (tp; parameters)
 		{
-			TemplateParameter tp = cast(TemplateParameter)parameters.data[i];
 			tp.declareParameter(paramscope);
 		}
 
-		for (int i = 0; i < parameters.dim; i++)
+		foreach (size_t i, TemplateParameter tp; parameters)
 		{
-			TemplateParameter tp = cast(TemplateParameter)parameters.data[i];
-
 			tp.semantic(paramscope);
 			if (i + 1 != parameters.dim && tp.isTemplateTupleParameter())
 				error("template tuple parameter must be last one");
@@ -335,11 +331,10 @@
 		buf.writeByte(' ');
 		buf.writestring(ident.toChars());
 		buf.writeByte('(');
-		for (int i = 0; i < parameters.dim; i++)
+		foreach (size_t i, TemplateParameter tp; parameters)
 		{
-			TemplateParameter tp = cast(TemplateParameter)parameters.data[i];
 			if (hgs.ddoc)
-				tp = cast(TemplateParameter)origParameters.data[i];
+				tp = origParameters[i];
 			if (i)
 				buf.writeByte(',');
 			tp.toCBuffer(buf, hgs);
@@ -415,9 +410,8 @@
 		/// memset(&hgs, 0, hgs.sizeof);
 		buf.writestring(ident.toChars());
 		buf.writeByte('(');
-		for (int i = 0; i < parameters.dim; i++)
+		foreach (size_t i, TemplateParameter tp; parameters)
 		{
-			TemplateParameter tp = cast(TemplateParameter)parameters.data[i];
 			if (i)
 				buf.writeByte(',');
 			tp.toCBuffer(buf, &hgs);
@@ -496,7 +490,7 @@
 		for (int i = 0; i < dedtypes_dim; i++)
 		{	
 			MATCH m2;
-			TemplateParameter tp = cast(TemplateParameter)parameters.data[i];
+			auto tp = parameters[i];
 			Declaration sparam;
 
 			//printf("\targument [%d]\n", i);
@@ -637,7 +631,7 @@
 		ti.tiargs.setDim(parameters.dim);
 		for (int i = 0; i < ti.tiargs.dim; i++)
 		{
-			TemplateParameter tp = cast(TemplateParameter)parameters.data[i];
+			auto tp = parameters[i];
 
 			auto p = tp.dummyArg();
 			if (p)
@@ -772,7 +766,7 @@
 			for (size_t i = 0; i < n; i++)
 			{   
 				assert(i < parameters.dim);
-				auto tp2 = cast(TemplateParameter)parameters.data[i];
+				auto tp2 = parameters[i];
 				MATCH m;
 				Declaration sparam = null;
 
@@ -890,7 +884,7 @@
 		{
 			for (size_t i = 0; i < parameters.dim; i++)
 			{   
-				TemplateParameter tp2 = cast(TemplateParameter)parameters.data[i];
+				auto tp2 = parameters[i];
 				TemplateThisParameter ttp = tp2.isTemplateThisParameter();
 				if (ttp)
 				{	
@@ -1060,7 +1054,7 @@
 		 */
 		for (size_t i = nargsi; i < dedargs.dim; i++)
 		{
-			auto tp2 = cast(TemplateParameter)parameters.data[i];
+			auto tp2 = parameters[i];
 			//printf("tp2[%d] = %s\n", i, tp2.ident.toChars());
 			/* For T:T*, the dedargs is the T*, dedtypes is the T
 			 * But for function templates, we really need them to match
--- a/dmd/TemplateInstance.d	Thu Sep 02 20:19:14 2010 +0100
+++ b/dmd/TemplateInstance.d	Thu Sep 02 22:41:12 2010 +0100
@@ -1213,7 +1213,7 @@
 		//printf("TemplateInstance.declareParameters()\n");
 		for (int i = 0; i < tdtypes.dim; i++)
 		{
-			TemplateParameter tp = cast(TemplateParameter)tempdecl.parameters.data[i];
+			auto tp = tempdecl.parameters[i];
 			//Object o = cast(Object)tiargs.data[i];
 			Object o = tdtypes[i];		// initializer for tp
 
--- a/dmd/TemplateParameter.d	Thu Sep 02 20:19:14 2010 +0100
+++ b/dmd/TemplateParameter.d	Thu Sep 02 22:41:12 2010 +0100
@@ -14,6 +14,7 @@
 import dmd.HdrGenState;
 import dmd.MATCH;
 import dmd.ArrayTypes;
+import dmd.Array;
 
 class TemplateParameter
 {
--- a/dmd/Type.d	Thu Sep 02 20:19:14 2010 +0100
+++ b/dmd/Type.d	Thu Sep 02 22:41:12 2010 +0100
@@ -100,10 +100,8 @@
 
 int templateIdentifierLookup(Identifier id, TemplateParameters parameters)
 {
-    for (size_t i = 0; i < parameters.dim; i++)
+    foreach (size_t i, TemplateParameter tp; parameters)
     {   
-		TemplateParameter tp = cast(TemplateParameter)parameters.data[i];
-
 		if (tp.ident.equals(id))
 			return i;
     }
@@ -1893,7 +1891,7 @@
 				Loc loc;
 				if (parameters.dim)
 				{
-					TemplateParameter tp = cast(TemplateParameter)parameters.data[0];
+					auto tp = parameters[0];
 					loc = tp.loc;
 				}
 
@@ -1905,7 +1903,7 @@
 				return deduceType(sc, tparam, parameters, dedtypes);
 			}
 
-			TemplateParameter tp = cast(TemplateParameter)parameters.data[i];
+			auto tp = parameters[i];
 
 			// Found the corresponding parameter tp
 			if (!tp.isTemplateTypeParameter())
--- a/dmd/TypeInstance.d	Thu Sep 02 20:19:14 2010 +0100
+++ b/dmd/TypeInstance.d	Thu Sep 02 22:41:12 2010 +0100
@@ -198,7 +198,7 @@
 						}
 						goto Lnomatch;
 					}
-					TemplateParameter tpx = cast(TemplateParameter)parameters.data[i];
+					TemplateParameter tpx = parameters[i];
 					// This logic duplicates tpx->matchArg()
 					TemplateAliasParameter ta = tpx.isTemplateAliasParameter();
 					if (!ta)
@@ -325,7 +325,7 @@
 L1:
 					if (j == -1)
 						goto Lnomatch;
-					TemplateParameter tp_ = cast(TemplateParameter)parameters.data[j];
+					auto tp_ = parameters[j];
 					// BUG: use tp->matchArg() instead of the following
 					TemplateValueParameter tv = tp_.isTemplateValueParameter();
 					if (!tv)
@@ -349,7 +349,7 @@
 					j = templateParameterLookup(t2, parameters);
 					if (j == -1)
 						goto Lnomatch;
-					TemplateParameter tp_ = cast(TemplateParameter)parameters.data[j];
+					auto tp_ = parameters[j];
 					// BUG: use tp->matchArg() instead of the following
 					TemplateAliasParameter ta = tp_.isTemplateAliasParameter();
 					if (!ta)
--- a/dmd/TypeSArray.d	Thu Sep 02 20:19:14 2010 +0100
+++ b/dmd/TypeSArray.d	Thu Sep 02 22:41:12 2010 +0100
@@ -508,7 +508,7 @@
 				// This code matches code in TypeInstance.deduceType()
 					if (i == -1)
 						goto Lnomatch;
-					TemplateParameter tp2 = cast(TemplateParameter)parameters.data[i];
+					auto tp2 = parameters[i];
 					TemplateValueParameter tvp = tp2.isTemplateValueParameter();
 					if (!tvp)
 						goto Lnomatch;
@@ -543,7 +543,7 @@
 
 						for (size_t i = 0; i < parameters.dim; i++)
 						{
-							auto tp2 = cast(TemplateParameter)parameters.data[i];
+							auto tp2 = parameters[i];
 
 							if (tp2.ident.equals(id))
 							{