# HG changeset patch # User Eldar Insafutdinov # Date 1283463672 -3600 # Node ID 347de076ad34393249d69eaa2bd2d19e4efb4234 # Parent 46ef67271ef3975fde6d7654ba930e081ddd7cd3 TemplateParameters -> Vector diff -r 46ef67271ef3 -r 347de076ad34 dmd/Array.d --- 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; diff -r 46ef67271ef3 -r 347de076ad34 dmd/ArrayTypes.d --- 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; } } diff -r 46ef67271ef3 -r 347de076ad34 dmd/IsExp.d --- 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); } } diff -r 46ef67271ef3 -r 347de076ad34 dmd/Parser.d --- 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); diff -r 46ef67271ef3 -r 347de076ad34 dmd/TemplateDeclaration.d --- 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 diff -r 46ef67271ef3 -r 347de076ad34 dmd/TemplateInstance.d --- 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 diff -r 46ef67271ef3 -r 347de076ad34 dmd/TemplateParameter.d --- 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 { diff -r 46ef67271ef3 -r 347de076ad34 dmd/Type.d --- 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()) diff -r 46ef67271ef3 -r 347de076ad34 dmd/TypeInstance.d --- 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) diff -r 46ef67271ef3 -r 347de076ad34 dmd/TypeSArray.d --- 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)) {