Mercurial > projects > dil
changeset 404:fe46b5ea7a18
Added method parseDeclarationsBlockNoColon().
Fix: some declarations can't be followed by a colon-block.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Sun, 23 Sep 2007 18:42:36 +0200 |
parents | e7228859d865 |
children | e2529923a0cb |
files | trunk/src/dil/Parser.d |
diffstat | 1 files changed, 14 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/trunk/src/dil/Parser.d Sat Sep 22 23:49:52 2007 +0200 +++ b/trunk/src/dil/Parser.d Sun Sep 23 18:42:36 2007 +0200 @@ -348,7 +348,7 @@ { DeclDefs } DeclDef */ - Declaration parseDeclarationsBlock() + Declaration parseDeclarationsBlock(bool noColon = false) { Declaration d; switch (token.type) @@ -357,6 +357,8 @@ d = parseDeclarationDefinitionsBlock(); break; case T.Colon: + if (noColon == true) + goto default; nT(); auto decls = new Declarations; while (token.type != T.RBrace && token.type != T.EOF) @@ -369,6 +371,11 @@ return d; } + Declaration parseDeclarationsBlockNoColon() + { + return parseDeclarationsBlock(true); + } + Declaration parseDeclaration(StorageClass stc = StorageClass.None) { Type type; @@ -1214,15 +1221,13 @@ // debug DeclarationsBlock // debug ( Condition ) DeclarationsBlock - decls = parseDeclarationsBlock(); + decls = parseDeclarationsBlockNoColon(); // else DeclarationsBlock if (token.type == T.Else) { nT(); - //if (token.type == T.Colon) - // TODO: avoid "else:"? - elseDecls = parseDeclarationsBlock(); + elseDecls = parseDeclarationsBlockNoColon(); } } @@ -1271,15 +1276,13 @@ require(T.RParen); // version ( Condition ) DeclarationsBlock - decls = parseDeclarationsBlock(); + decls = parseDeclarationsBlockNoColon(); // else DeclarationsBlock if (token.type == T.Else) { nT(); - //if (token.type == T.Colon) - // TODO: avoid "else:"? - elseDecls = parseDeclarationsBlock(); + elseDecls = parseDeclarationsBlockNoColon(); } } @@ -1300,18 +1303,12 @@ condition = parseAssignExpression(); require(T.RParen); - if (token.type != T.Colon) - ifDecls = parseDeclarationsBlock(); - else - expected(T.LBrace); // TODO: better error msg + ifDecls = parseDeclarationsBlockNoColon(); if (token.type == T.Else) { nT(); - if (token.type != T.Colon) - elseDecls = parseDeclarationsBlock(); - else - expected(T.LBrace); // TODO: better error msg + elseDecls = parseDeclarationsBlockNoColon(); } return new StaticIfDeclaration(condition, ifDecls, elseDecls);