# HG changeset patch # User aziz # Date 1186001704 0 # Node ID 112a57f433f28a5512434fcfc5a7301fb9b220d8 # Parent 6c58366ba1ebde7324bec8beffdc49b8fcd42e74 - Created class TemplateParameters. - Changed instances of TemplateParameter[] to TemplateParameters. diff -r 6c58366ba1eb -r 112a57f433f2 trunk/src/Declarations.d --- a/trunk/src/Declarations.d Wed Aug 01 20:37:03 2007 +0000 +++ b/trunk/src/Declarations.d Wed Aug 01 20:55:04 2007 +0000 @@ -104,10 +104,10 @@ class ClassDeclaration : Declaration { string name; - TemplateParameter[] tparams; + TemplateParameters tparams; BaseClass[] bases; Declaration[] decls; - this(string name, TemplateParameter[] tparams, BaseClass[] bases, Declaration[] decls, bool hasBody) + this(string name, TemplateParameters tparams, BaseClass[] bases, Declaration[] decls, bool hasBody) { super(hasBody); this.name = name; @@ -120,10 +120,10 @@ class InterfaceDeclaration : Declaration { string name; - TemplateParameter[] tparams; + TemplateParameters tparams; BaseClass[] bases; Declaration[] decls; - this(string name, TemplateParameter[] tparams, BaseClass[] bases, Declaration[] decls, bool hasBody) + this(string name, TemplateParameters tparams, BaseClass[] bases, Declaration[] decls, bool hasBody) { super(hasBody); this.name = name; @@ -136,9 +136,9 @@ class StructDeclaration : Declaration { string name; - TemplateParameter[] tparams; + TemplateParameters tparams; Declaration[] decls; - this(string name, TemplateParameter[] tparams, Declaration[] decls, bool hasBody) + this(string name, TemplateParameters tparams, Declaration[] decls, bool hasBody) { super(hasBody); this.name = name; @@ -150,9 +150,9 @@ class UnionDeclaration : Declaration { string name; - TemplateParameter[] tparams; + TemplateParameters tparams; Declaration[] decls; - this(string name, TemplateParameter[] tparams, Declaration[] decls, bool hasBody) + this(string name, TemplateParameters tparams, Declaration[] decls, bool hasBody) { super(hasBody); this.name = name; @@ -207,9 +207,9 @@ { string funcName; Type funcType; - TemplateParameter[] tparams; + TemplateParameters tparams; FunctionBody funcBody; - this(string funcName, Type funcType, TemplateParameter[] tparams, FunctionBody funcBody) + this(string funcName, Type funcType, TemplateParameters tparams, FunctionBody funcBody) { super(funcBody.funcBody !is null); this.funcName = funcName; @@ -317,9 +317,9 @@ class TemplateDeclaration : Declaration { string templateName; - TemplateParameter[] templateParams; + TemplateParameters templateParams; Declaration[] decls; - this(string templateName, TemplateParameter[] templateParams, Declaration[] decls) + this(string templateName, TemplateParameters templateParams, Declaration[] decls) { super(true); this.templateName = templateName; diff -r 6c58366ba1eb -r 112a57f433f2 trunk/src/Parser.d --- a/trunk/src/Parser.d Wed Aug 01 20:37:03 2007 +0000 +++ b/trunk/src/Parser.d Wed Aug 01 20:55:04 2007 +0000 @@ -333,7 +333,7 @@ { // writef("°Function°"); // It's a function declaration - TemplateParameter[] tparams; + TemplateParameters tparams; if (tokenAfterParenIs(T.LParen)) { // ( TemplateParameterList ) ( ParameterList ) @@ -842,7 +842,7 @@ assert(token.type == T.Class); string className; - TemplateParameter[] tparams; + TemplateParameters tparams; BaseClass[] bases; Declaration[] decls; bool hasBody; @@ -917,7 +917,7 @@ assert(token.type == T.Interface); string name; - TemplateParameter[] tparams; + TemplateParameters tparams; BaseClass[] bases; Declaration[] decls; bool hasBody; @@ -959,7 +959,7 @@ TOK tok = token.type; string name; - TemplateParameter[] tparams; + TemplateParameters tparams; Declaration[] decls; bool hasBody; @@ -3219,7 +3219,7 @@ break; /+ // parsed in parseDeclaration() case T.LParen: - TemplateParameter[] tparams; + TemplateParameters tparams; if (tokenAfterParenIs(T.LParen)) { // ( TemplateParameterList ) ( ParameterList ) @@ -3423,15 +3423,17 @@ return args; } - TemplateParameter[] parseTemplateParameterList() + TemplateParameters parseTemplateParameterList() { + auto begin = token; require(T.LParen); if (token.type == T.RParen) return null; - TemplateParameter[] tparams; + auto tparams = new TemplateParameters; while (1) { + auto paramBegin = token; TP tp; Token* ident; Type valueType; @@ -3517,13 +3519,14 @@ } } - tparams ~= new TemplateParameter(tp, valueType, ident, specType, defType, specValue, defValue); + tparams ~= set(new TemplateParameter(tp, valueType, ident, specType, defType, specValue, defValue), paramBegin); if (token.type != T.Comma) break; nT(); } require(T.RParen); + set(tparams, begin); return tparams; } diff -r 6c58366ba1eb -r 112a57f433f2 trunk/src/Types.d --- a/trunk/src/Types.d Wed Aug 01 20:37:03 2007 +0000 +++ b/trunk/src/Types.d Wed Aug 01 20:55:04 2007 +0000 @@ -160,6 +160,21 @@ } } +class TemplateParameters : Node +{ + TemplateParameter[] params; + + this() + { + super(NodeType.Other); + } + + void opCatAssign(TemplateParameter parameter) + { + params ~= parameter; + } +} + class TemplateArguments : Node { Node[] args; @@ -356,8 +371,8 @@ { Type returnType; Parameters parameters; - TemplateParameter[] tparams; - this(Type returnType, Parameters parameters, TemplateParameter[] tparams = null) + TemplateParameters tparams; + this(Type returnType, Parameters parameters, TemplateParameters tparams = null) { super(TID.Function, null); this.returnType = returnType;