changeset 209:921d15b1beeb

- Added members token and loc to State. - Saving loc in peek().
author aziz
date Sat, 21 Jul 2007 18:52:01 +0000
parents 0a9bccf74046
children b7bde6583d3e
files trunk/src/Lexer.d
diffstat 1 files changed, 10 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/Lexer.d	Sat Jul 21 15:43:04 2007 +0000
+++ b/trunk/src/Lexer.d	Sat Jul 21 18:52:01 2007 +0000
@@ -1438,12 +1438,16 @@
   struct State
   {
     Lexer lexer;
+    Token token;
     char* scanPointer;
+    int loc;
     size_t errorLen;
-    static State opCall(Lexer lexer, char* p, size_t len)
+    static State opCall(Lexer lexer, Token token, char* p, int loc, size_t len)
     {
       State s;
       s.lexer = lexer;
+      s.token = token;
+      s.loc = loc;
       s.scanPointer = p;
       s.errorLen = len;
       return s;
@@ -1451,13 +1455,15 @@
     void restore()
     {
       lexer.p = scanPointer;
+      lexer.token = token;
+      lexer.loc = loc;
       lexer.errors = lexer.errors[0..errorLen];
     }
   }
 
   State getState()
   {
-    return State(this, p, errors.length);
+    return State(this, token, p, loc, errors.length);
   }
 
   void peek(ref Token t)
@@ -1467,6 +1473,7 @@
     // so as to avoid getting the same error more than once.
     reportErrors = false;
     char* save = p;
+    auto saveLoc = loc;
     if (t.end !is null) // For successive peeks.
     {
       p = t.end;
@@ -1474,6 +1481,7 @@
     }
     scan(t);
     p = save;
+    loc = saveLoc;
     reportErrors = true;
   }