changeset 176:3071522c0cf0

- Implemented parseGotoStatement().
author aziz
date Sat, 14 Jul 2007 11:02:00 +0000
parents 522df6f0f230
children 504b1b2f7c93
files trunk/src/Parser.d trunk/src/Statements.d
diffstat 2 files changed, 35 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/Parser.d	Sat Jul 14 10:44:05 2007 +0000
+++ b/trunk/src/Parser.d	Sat Jul 14 11:02:00 2007 +0000
@@ -1166,6 +1166,9 @@
     case T.Return:
       s = parseReturnStatement();
       break;
+    case T.Goto:
+      s = parseGotoStatement();
+      break;
     default:
       // TODO: issue error msg and return IllegalStatement.
     }
@@ -1432,6 +1435,31 @@
     return new ReturnStatement(expr);
   }
 
+  Statement parseGotoStatement()
+  {
+    assert(token.type == T.Goto);
+    nT();
+    string ident;
+    Expression caseExpr;
+    switch (token.type)
+    {
+    case T.Case:
+      nT();
+      if (token.type == T.Semicolon)
+        break;
+      caseExpr = parseExpression();
+      break;
+    case T.Default:
+      nT();
+      break;
+    default:
+      ident = requireIdentifier();
+      nT();
+    }
+    require(T.Semicolon);
+    return new GotoStatement(ident, caseExpr);
+  }
+
   /+++++++++++++++++++++++++++++
   + Expression parsing methods +
   +++++++++++++++++++++++++++++/
--- a/trunk/src/Statements.d	Sat Jul 14 10:44:05 2007 +0000
+++ b/trunk/src/Statements.d	Sat Jul 14 11:02:00 2007 +0000
@@ -188,7 +188,13 @@
 
 class GotoStatement : Statement
 {
-
+  string ident;
+  Expression caseExpr;
+  this(string ident, Expression caseExpr)
+  {
+    this.ident = ident;
+    this.caseExpr = caseExpr;
+  }
 }
 
 class WithStatement : Statement