diff trunk/src/Parser.d @ 318:a1c9d93a66e3

- Added member prevToken to Parser. - Setting node tokens with prevToken instead of token. - Moved require(T.LBrace) and require(T.RBrace) inside parseStatements().
author aziz
date Fri, 17 Aug 2007 11:35:02 +0000
parents ebd21bbf296e
children 83f1f9a4f248
line wrap: on
line diff
--- a/trunk/src/Parser.d	Wed Aug 15 21:46:00 2007 +0000
+++ b/trunk/src/Parser.d	Fri Aug 17 11:35:02 2007 +0000
@@ -19,7 +19,8 @@
 class Parser
 {
   Lexer lx;
-  Token* token;
+  Token* token; /// Current non-whitespace token.
+  Token* prevToken; /// Previous non-whitespace token.
 
   Information[] errors;
 
@@ -34,10 +35,12 @@
   {
     debug prev = lx.text.ptr;
     nT();
+    prevToken = token;
   }
 
   void nT()
   {
+    prevToken = token;
     do
     {
       lx.nextToken();
@@ -68,6 +71,7 @@
     ++trying;
 //     auto len = errors.length;
     auto oldToken = token;
+    auto oldPrevToken = prevToken;
     auto oldCount = errorCount;
 //     auto lexerState = lx.getState();
     auto result = parseMethod();
@@ -77,6 +81,7 @@
 //       lexerState.restore(); // Restore state of the Lexer object.
 //       errors = errors[0..len]; // Remove errors that were added when parseMethod() was called.
       token = oldToken;
+      prevToken = oldPrevToken;
       lx.token = oldToken;
       errorCount = oldCount;
       success = false;
@@ -90,7 +95,7 @@
 
   Class set(Class)(Class node, Token* begin)
   {
-    node.setTokens(begin, this.token);
+    node.setTokens(begin, this.prevToken);
     return node;
   }
 
@@ -494,9 +499,7 @@
       switch (token.type)
       {
       case T.LBrace:
-        require(T.LBrace);
         func.funcBody = parseStatements();
-        require(T.RBrace);
         break;
       case T.Semicolon:
         nT();
@@ -505,9 +508,7 @@
         //if (func.inBody)
           // TODO: issue error msg.
         nT();
-        require(T.LBrace);
         func.inBody = parseStatements();
-        require(T.RBrace);
         continue;
       case T.Out:
         //if (func.outBody)
@@ -519,9 +520,7 @@
           func.outIdent = requireId();
           require(T.RParen);
         }
-        require(T.LBrace);
         func.outBody = parseStatements();
-        require(T.RBrace);
         continue;
       case T.Body:
         nT();
@@ -1506,9 +1505,11 @@
   Statements parseStatements()
   {
     auto begin = token;
+    require(T.LBrace);
     auto statements = new Statements();
     while (token.type != T.RBrace && token.type != T.EOF)
       statements ~= parseStatement();
+    require(T.RBrace);
     return set(statements, begin);
   }