changeset 184:30a4c8522b09

- Implemented parsePragmaStatement().
author aziz
date Sat, 14 Jul 2007 14:58:01 +0000
parents c9df82f6f6be
children 35c93b776be0
files trunk/src/Parser.d trunk/src/Statements.d
diffstat 2 files changed, 37 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/Parser.d	Sat Jul 14 14:45:03 2007 +0000
+++ b/trunk/src/Parser.d	Sat Jul 14 14:58:01 2007 +0000
@@ -1194,6 +1194,9 @@
     case T.Asm:
       s = parseAsmStatement();
       break;
+    case T.Pragma:
+      s = parsePragmaStatement();
+      break;
     default:
       // TODO: issue error msg and return IllegalStatement.
     }
@@ -1599,6 +1602,31 @@
     return new VolatileStatement(volatileBody);
   }
 
+  Statement parsePragmaStatement()
+  {
+    assert(token.type == T.Pragma);
+    nT();
+
+    string ident;
+    Expression[] args;
+    Statement pragmaBody;
+
+    require(T.LParen);
+    ident = requireIdentifier();
+
+    if (token.type == T.Comma)
+      args = parseArguments(T.RParen);
+    else
+      require(T.RParen);
+
+    if (token.type == T.Semicolon)
+      nT();
+    else
+      pragmaBody = parseNoScopeStatement();
+
+    return new PragmaStatement(ident, args, pragmaBody);
+  }
+
   /+++++++++++++++++++++++++++++
   + Assembler parsing methods  +
   +++++++++++++++++++++++++++++/
--- a/trunk/src/Statements.d	Sat Jul 14 14:45:03 2007 +0000
+++ b/trunk/src/Statements.d	Sat Jul 14 14:58:01 2007 +0000
@@ -288,7 +288,15 @@
 
 class PragmaStatement : Statement
 {
-
+  string ident;
+  Expression[] args;
+  Statement pragmaBody;
+  this(string ident, Expression[] args, Statement pragmaBody)
+  {
+    this.ident = ident;
+    this.args = args;
+    this.pragmaBody = pragmaBody;
+  }
 }
 
 class MixinStatement : Statement