changeset 258:112a57f433f2

- Created class TemplateParameters. - Changed instances of TemplateParameter[] to TemplateParameters.
author aziz
date Wed, 01 Aug 2007 20:55:04 +0000
parents 6c58366ba1eb
children 8118da6fee44
files trunk/src/Declarations.d trunk/src/Parser.d trunk/src/Types.d
diffstat 3 files changed, 40 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- 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;
--- 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;
   }
 
--- 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;