# HG changeset patch # User aziz # Date 1184528404 0 # Node ID ff32eb87300edfd19e4862fcf70e2f235720c32f # Parent ea3f66901fa404269e3a04aa494e8c5682476e06 - Using parseFunctionBody() for Constructor-,Destructor-,StaticConstructor-,StaticDestructor-,Invariant-,Unittest-,New- and DeleteDeclaration. diff -r ea3f66901fa4 -r ff32eb87300e trunk/src/Declarations.d --- 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; } } diff -r ea3f66901fa4 -r ff32eb87300e trunk/src/Parser.d --- 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); } /+