Mercurial > projects > dil
changeset 125:240a8b053803
- Added method parseStaticIfDeclaration and added class StaticIfDeclaration.
author | aziz |
---|---|
date | Mon, 09 Jul 2007 21:52:01 +0000 |
parents | d4c4cea6ee7f |
children | 0f0e7352e91d |
files | trunk/src/Declarations.d trunk/src/Parser.d |
diffstat | 2 files changed, 56 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/trunk/src/Declarations.d Mon Jul 09 21:07:03 2007 +0000 +++ b/trunk/src/Declarations.d Mon Jul 09 21:52:01 2007 +0000 @@ -233,3 +233,16 @@ this.elseDecls = elseDecls; } } + +class StaticIfDeclaration : Declaration +{ + Expression condition; + Declaration[] ifDecls, elseDecls; + this(Expression condition, Declaration[] ifDecls, Declaration[] elseDecls) + { + super(true); + this.condition = condition; + this.ifDecls = ifDecls; + this.elseDecls = elseDecls; + } +}
--- a/trunk/src/Parser.d Mon Jul 09 21:07:03 2007 +0000 +++ b/trunk/src/Parser.d Mon Jul 09 21:52:01 2007 +0000 @@ -113,14 +113,22 @@ Token t; lx.peek(t); - if (t.type == T.Import) + switch (t.type) + { + case T.Import: goto case T.Import; - else if (t.type == T.This) + case T.This: decl = parseStaticConstructorDeclaration(); - else if (t.type == T.Tilde) + break; + case T.Tilde: decl = parseStaticDestructorDeclaration(); - else + break; + case T.If: + decl = parseStaticIfDeclaration(); + break; + default: goto case_AttributeSpecifier; + } break; case T.Import: decl = parseImportDeclaration(); @@ -704,6 +712,37 @@ return new VersionDeclaration(levelSpec, identSpec, levelCond, identCond, decls, elseDecls); } + Declaration parseStaticIfDeclaration() + { + assert(token.type == T.Static); + + nT(); // Skip static keyword. + nT(); // Skip if keyword. + + Expression condition; + Declaration[] ifDecls, elseDecls; + + require(T.LParen); + condition = parseAssignExpression(); + require(T.RParen); + + if (token.type != T.Colon) + ifDecls = parseDeclarationsBlock(); + else + expected(T.LBrace); // TODO: better error msg + + if (token.type == T.Else) + { + nT(); + if (token.type != T.Colon) + elseDecls = parseDeclarationsBlock(); + else + expected(T.LBrace); // TODO: better error msg + } + + return new StaticIfDeclaration(condition, ifDecls, elseDecls); + } + /+++++++++++++++++++++++++++++ + Expression parsing methods + +++++++++++++++++++++++++++++/