changeset 141:7ab33ee1a641

- Implemented parseNew- and DeleteDeclaration(). - Added classes NewDeclaration and DeleteDeclaration.
author aziz
date Wed, 11 Jul 2007 20:55:02 +0000
parents 64d7186b087c
children 50251b408965
files trunk/src/Declarations.d trunk/src/Parser.d
diffstat 2 files changed, 53 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/Declarations.d	Wed Jul 11 19:41:04 2007 +0000
+++ b/trunk/src/Declarations.d	Wed Jul 11 20:55:02 2007 +0000
@@ -279,3 +279,27 @@
     this.decls = decls;
   }
 }
+
+class NewDeclaration : Declaration
+{
+  Parameters parameters;
+  Declaration[] decls;
+  this(Parameters parameters, Declaration[] decls)
+  {
+    super(true);
+    this.parameters = parameters;
+    this.decls = decls;
+  }
+}
+
+class DeleteDeclaration : Declaration
+{
+  Parameters parameters;
+  Declaration[] decls;
+  this(Parameters parameters, Declaration[] decls)
+  {
+    super(true);
+    this.parameters = parameters;
+    this.decls = decls;
+  }
+}
--- a/trunk/src/Parser.d	Wed Jul 11 19:41:04 2007 +0000
+++ b/trunk/src/Parser.d	Wed Jul 11 20:55:02 2007 +0000
@@ -169,6 +169,12 @@
     case T.Template:
       decl = parseTemplateDeclaration();
       break;
+    case T.New:
+      decl = parseNewDeclaration();
+      break;
+    case T.Delete:
+      decl = parseDeleteDeclaration();
+      break;
     case T.Semicolon:
       nT();
       decl = new EmptyDeclaration();
@@ -795,6 +801,29 @@
     return new TemplateDeclaration(templateName, templateParams, decls);
   }
 
+  Declaration parseNewDeclaration()
+  {
+    assert(token.type == T.New);
+    nT(); // Skip new keyword.
+    auto parameters = parseParameters();
+    require(T.LBrace);
+    auto decls = parseDeclarationDefinitions();
+    require(T.RBrace);
+    return new NewDeclaration(parameters, decls);
+  }
+
+  Declaration parseDeleteDeclaration()
+  {
+    assert(token.type == T.Delete);
+    nT(); // Skip delete keyword.
+    auto parameters = parseParameters();
+    // TODO: only one parameter of type void* allowed.
+    require(T.LBrace);
+    auto decls = parseDeclarationDefinitions();
+    require(T.RBrace);
+    return new DeleteDeclaration(parameters, decls);
+  }
+
   /+++++++++++++++++++++++++++++
   + Expression parsing methods +
   +++++++++++++++++++++++++++++/