changeset 140:64d7186b087c

- Implemented parseTemplateParameters(). - Added class TemplateDeclaration.
author aziz
date Wed, 11 Jul 2007 19:41:04 +0000
parents d48f345b05f8
children 7ab33ee1a641
files trunk/src/Declarations.d trunk/src/Parser.d
diffstat 2 files changed, 32 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/Declarations.d	Wed Jul 11 14:22:05 2007 +0000
+++ b/trunk/src/Declarations.d	Wed Jul 11 19:41:04 2007 +0000
@@ -265,3 +265,17 @@
     this.message = message;
   }
 }
+
+class TemplateDeclaration : Declaration
+{
+  string templateName;
+  TemplateParameter[] templateParams;
+  Declaration[] decls;
+  this(string templateName, TemplateParameter[] templateParams, Declaration[] decls)
+  {
+    super(true);
+    this.templateName = templateName;
+    this.templateParams = templateParams;
+    this.decls = decls;
+  }
+}
--- a/trunk/src/Parser.d	Wed Jul 11 14:22:05 2007 +0000
+++ b/trunk/src/Parser.d	Wed Jul 11 19:41:04 2007 +0000
@@ -165,6 +165,10 @@
       break;
     case T.Debug:
       decl = parseDebugDeclaration();
+      break;
+    case T.Template:
+      decl = parseTemplateDeclaration();
+      break;
     case T.Semicolon:
       nT();
       decl = new EmptyDeclaration();
@@ -376,6 +380,7 @@
     if (token.type == T.LParen)
     {
       // TODO: parse template parameters
+      // parseTemplateParameters();
     }
 
     if (token.type == T.Colon)
@@ -422,7 +427,7 @@
       case T.Protected: prot = Protection.Protected; break;
       case T.Package:   prot = Protection.Package;   break;
       case T.Public:  /*prot = Protection.Public;*/  break;
-      //case T.Dot: // What about "class Foo : .Bar"?
+      //case T.Dot: // TODO: What about "class Foo : .Bar"?
       default:
         // TODO: issue error msg
         return bases;
@@ -778,6 +783,18 @@
     return new StaticAssertDeclaration(condition, message);
   }
 
+  Declaration parseTemplateDeclaration()
+  {
+    assert(token.type == T.Template);
+    nT(); // Skip template keyword.
+    auto templateName = requireIdentifier();
+    auto templateParams = parseTemplateParameters();
+    require(T.LBrace);
+    auto decls = parseDeclarationDefinitions();
+    require(T.RBrace);
+    return new TemplateDeclaration(templateName, templateParams, decls);
+  }
+
   /+++++++++++++++++++++++++++++
   + Expression parsing methods +
   +++++++++++++++++++++++++++++/