changeset 220:0c647e319b8e

- Removed assert from parseStatement(). - Implemented parseCaseDefaultBody().
author aziz
date Thu, 26 Jul 2007 16:37:05 +0000
parents 0d14a09227a4
children f26a2beb745e
files trunk/src/Parser.d
diffstat 1 files changed, 25 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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()