diff trunk/src/Parser.d @ 119:363cd39022f9

- Added parseStaticConstructor- and DestructorDeclaration(). - Addd classes StaticConstructor- and DesctructorDeclaration.
author aziz
date Mon, 09 Jul 2007 17:21:05 +0000
parents 379f33cbd521
children e5329dac0405
line wrap: on
line diff
--- a/trunk/src/Parser.d	Mon Jul 09 16:59:05 2007 +0000
+++ b/trunk/src/Parser.d	Mon Jul 09 17:21:05 2007 +0000
@@ -112,9 +112,16 @@
     case T.Static:
       Token t;
       lx.peek(t);
-      if (t.type != T.Import)
+
+      if (t.type == T.Import)
+        goto case T.Import;
+      else if (t.type == T.This)
+        decl = parseStaticConstructorDeclaration();
+      else if (t.type == T.Tilde)
+        decl = parseStaticDestructorDeclaration();
+      else
         goto case_AttributeSpecifier;
-      //goto case T.Import;
+      break;
     case T.Import:
       decl = parseImportDeclaration();
       break;
@@ -489,6 +496,33 @@
     return new DestructorDeclaration(statements);
   }
 
+  Declaration parseStaticConstructorDeclaration()
+  {
+    assert(token.type == T.Static);
+    nT(); // Skip static keyword.
+    nT(); // Skip 'this' keyword.
+    require(T.LParen);
+    require(T.RParen);
+    require(T.LBrace);
+    auto statements = parseStatements();
+    require(T.RBrace);
+    return new StaticConstructorDeclaration(statements);
+  }
+
+  Declaration parseStaticDestructorDeclaration()
+  {
+    assert(token.type == T.Static);
+    nT(); // Skip static keyword.
+    nT(); // Skip ~
+    require(T.This);
+    require(T.LParen);
+    require(T.RParen);
+    require(T.LBrace);
+    auto statements = parseStatements();
+    require(T.RBrace);
+    return new StaticDestructorDeclaration(statements);
+  }
+
   /+++++++++++++++++++++++++++++
   + Expression parsing methods +
   +++++++++++++++++++++++++++++/