# HG changeset patch # User aziz # Date 1185467825 0 # Node ID 0c647e319b8ef942623aaad406b81cad2ab891c2 # Parent 0d14a09227a49550d957b763d0d2d870eb2cc109 - Removed assert from parseStatement(). - Implemented parseCaseDefaultBody(). diff -r 0d14a09227a4 -r 0c647e319b8e trunk/src/Parser.d --- a/trunk/src/Parser.d Thu Jul 26 13:40:02 2007 +0000 +++ b/trunk/src/Parser.d Thu Jul 26 16:37:05 2007 +0000 @@ -1373,8 +1373,6 @@ Statement parseStatement() { - assert(token.type != T.RBrace && token.type != T.EOF); - // writefln("°parseStatement:(%d)token='%s'°", lx.loc, token.srcText); Statement s; @@ -1770,6 +1768,29 @@ return new SwitchStatement(condition, switchBody); } + Statement parseCaseDefaultBody() + { + // This function is similar to parseNoScopeStatement() + Statement s; + if (token.type == T.LBrace) + { + nT(); + auto ss = new Statements(); + while (token.type != T.Case && + token.type != T.Default && + token.type != T.RBrace && + token.type != T.EOF) + ss ~= parseStatement(); + require(T.RBrace); + s = ss; + } + else if (token.type == T.RBrace) + {} + else + s = parseStatement(); + return new ScopeStatement(s); + } + Statement parseCaseStatement() { assert(token.type == T.Case); @@ -1782,7 +1803,7 @@ } while (token.type == T.Comma) require(T.Colon); - auto caseBody = parseScopeStatement(); + auto caseBody = parseCaseDefaultBody(); return new CaseStatement(values, caseBody); } @@ -1791,7 +1812,7 @@ assert(token.type == T.Default); nT(); require(T.Colon); - return new DefaultStatement(parseScopeStatement()); + return new DefaultStatement(parseCaseDefaultBody()); } Statement parseContinueStatement()