changeset 197:ff32eb87300e

- Using parseFunctionBody() for Constructor-,Destructor-,StaticConstructor-,StaticDestructor-,Invariant-,Unittest-,New- and DeleteDeclaration.
author aziz
date Sun, 15 Jul 2007 19:40:04 +0000
parents ea3f66901fa4
children 88c1777a9e51
files trunk/src/Declarations.d trunk/src/Parser.d
diffstat 2 files changed, 41 insertions(+), 57 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/Declarations.d	Sun Jul 15 19:19:03 2007 +0000
+++ b/trunk/src/Declarations.d	Sun Jul 15 19:40:04 2007 +0000
@@ -152,42 +152,42 @@
 class ConstructorDeclaration : Declaration
 {
   Parameters parameters;
-  Statements statements;
-  this(Parameters parameters, Statements statements)
+  FunctionBody funcBody;
+  this(Parameters parameters, FunctionBody funcBody)
   {
     super(true);
     this.parameters = parameters;
-    this.statements = statements;
+    this.funcBody = funcBody;
   }
 }
 
 class StaticConstructorDeclaration : Declaration
 {
-  Statements statements;
-  this(Statements statements)
+  FunctionBody funcBody;
+  this(FunctionBody funcBody)
   {
     super(true);
-    this.statements = statements;
+    this.funcBody = funcBody;
   }
 }
 
 class DestructorDeclaration : Declaration
 {
-  Statements statements;
-  this(Statements statements)
+  FunctionBody funcBody;
+  this(FunctionBody funcBody)
   {
     super(true);
-    this.statements = statements;
+    this.funcBody = funcBody;
   }
 }
 
 class StaticDestructorDeclaration : Declaration
 {
-  Statements statements;
-  this(Statements statements)
+  FunctionBody funcBody;
+  this(FunctionBody funcBody)
   {
     super(true);
-    this.statements = statements;
+    this.funcBody = funcBody;
   }
 }
 
@@ -220,21 +220,21 @@
 
 class InvariantDeclaration : Declaration
 {
-  Statements statements;
-  this(Statements statements)
+  FunctionBody funcBody;
+  this(FunctionBody funcBody)
   {
     super(true);
-    this.statements = statements;
+    this.funcBody = funcBody;
   }
 }
 
 class UnittestDeclaration : Declaration
 {
-  Statements statements;
-  this(Statements statements)
+  FunctionBody funcBody;
+  this(FunctionBody funcBody)
   {
     super(true);
-    this.statements = statements;
+    this.funcBody = funcBody;
   }
 }
 
@@ -319,24 +319,24 @@
 class NewDeclaration : Declaration
 {
   Parameters parameters;
-  Declaration[] decls;
-  this(Parameters parameters, Declaration[] decls)
+  FunctionBody funcBody;
+  this(Parameters parameters, FunctionBody funcBody)
   {
     super(true);
     this.parameters = parameters;
-    this.decls = decls;
+    this.funcBody = funcBody;
   }
 }
 
 class DeleteDeclaration : Declaration
 {
   Parameters parameters;
-  Declaration[] decls;
-  this(Parameters parameters, Declaration[] decls)
+  FunctionBody funcBody;
+  this(Parameters parameters, FunctionBody funcBody)
   {
     super(true);
     this.parameters = parameters;
-    this.decls = decls;
+    this.funcBody = funcBody;
   }
 }
 
--- a/trunk/src/Parser.d	Sun Jul 15 19:19:03 2007 +0000
+++ b/trunk/src/Parser.d	Sun Jul 15 19:40:04 2007 +0000
@@ -748,10 +748,8 @@
     assert(token.type == T.This);
     nT(); // Skip 'this' keyword.
     auto parameters = parseParameterList();
-    require(T.LBrace);
-    auto statements = parseStatements();
-    require(T.RBrace);
-    return new ConstructorDeclaration(parameters, statements);
+    auto funcBody = parseFunctionBody(new FunctionBody);
+    return new ConstructorDeclaration(parameters, funcBody);
   }
 
   Declaration parseDestructorDeclaration()
@@ -761,10 +759,8 @@
     require(T.This);
     require(T.LParen);
     require(T.RParen);
-    require(T.LBrace);
-    auto statements = parseStatements();
-    require(T.RBrace);
-    return new DestructorDeclaration(statements);
+    auto funcBody = parseFunctionBody(new FunctionBody);
+    return new DestructorDeclaration(funcBody);
   }
 
   Declaration parseStaticConstructorDeclaration()
@@ -774,10 +770,8 @@
     nT(); // Skip 'this' keyword.
     require(T.LParen);
     require(T.RParen);
-    require(T.LBrace);
-    auto statements = parseStatements();
-    require(T.RBrace);
-    return new StaticConstructorDeclaration(statements);
+    auto funcBody = parseFunctionBody(new FunctionBody);
+    return new StaticConstructorDeclaration(funcBody);
   }
 
   Declaration parseStaticDestructorDeclaration()
@@ -788,10 +782,8 @@
     require(T.This);
     require(T.LParen);
     require(T.RParen);
-    require(T.LBrace);
-    auto statements = parseStatements();
-    require(T.RBrace);
-    return new StaticDestructorDeclaration(statements);
+    auto funcBody = parseFunctionBody(new FunctionBody);
+    return new StaticDestructorDeclaration(funcBody);
   }
 
   Declaration parseInvariantDeclaration()
@@ -801,10 +793,8 @@
     // Optional () for getting ready porting to D 2.0
     if (token.type == T.LParen)
       requireNext(T.RParen);
-    require(T.LBrace);
-    auto statements = parseStatements();
-    require(T.RBrace);
-    return new InvariantDeclaration(statements);
+    auto funcBody = parseFunctionBody(new FunctionBody);
+    return new InvariantDeclaration(funcBody);
   }
 
   Declaration parseUnittestDeclaration()
@@ -812,10 +802,8 @@
     assert(token.type == T.Unittest);
 
     nT(); // Skip unittest keyword.
-    require(T.LBrace);
-    auto statements = parseStatements();
-    require(T.RBrace);
-    return new UnittestDeclaration(statements);
+    auto funcBody = parseFunctionBody(new FunctionBody);
+    return new UnittestDeclaration(funcBody);
   }
 
   Declaration parseDebugDeclaration()
@@ -1008,10 +996,8 @@
     assert(token.type == T.New);
     nT(); // Skip new keyword.
     auto parameters = parseParameterList();
-    require(T.LBrace);
-    auto decls = parseDeclarationDefinitions();
-    require(T.RBrace);
-    return new NewDeclaration(parameters, decls);
+    auto funcBody = parseFunctionBody(new FunctionBody);
+    return new NewDeclaration(parameters, funcBody);
   }
 
   Declaration parseDeleteDeclaration()
@@ -1019,11 +1005,9 @@
     assert(token.type == T.Delete);
     nT(); // Skip delete keyword.
     auto parameters = parseParameterList();
-    // TODO: only one parameter of type void* allowed.
-    require(T.LBrace);
-    auto decls = parseDeclarationDefinitions();
-    require(T.RBrace);
-    return new DeleteDeclaration(parameters, decls);
+    // TODO: only one parameter of type void* allowed. Check in parsing or semantic phase?
+    auto funcBody = parseFunctionBody(new FunctionBody);
+    return new DeleteDeclaration(parameters, funcBody);
   }
 
   /+