Mercurial > projects > dil
changeset 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 |
files | trunk/src/Declarations.d trunk/src/Parser.d |
diffstat | 2 files changed, 56 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/trunk/src/Declarations.d Mon Jul 09 16:59:05 2007 +0000 +++ b/trunk/src/Declarations.d Mon Jul 09 17:21:05 2007 +0000 @@ -144,6 +144,16 @@ } } +class StaticConstructorDeclaration : Declaration +{ + Statement[] statements; + this(Statement[] statements) + { + super(true); + this.statements = statements; + } +} + class DestructorDeclaration : Declaration { Statement[] statements; @@ -153,3 +163,13 @@ this.statements = statements; } } + +class StaticDestructorDeclaration : Declaration +{ + Statement[] statements; + this(Statement[] statements) + { + super(true); + this.statements = statements; + } +}
--- 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 + +++++++++++++++++++++++++++++/