diff trunk/src/Lexer.d @ 105:df34ec47fb81

- Added getState() method and State struct to Lexer. - Implemented try_() method.
author aziz
date Sun, 08 Jul 2007 11:57:03 +0000
parents 511a1aa25896
children 004d98df65af
line wrap: on
line diff
--- a/trunk/src/Lexer.d	Sun Jul 08 11:03:05 2007 +0000
+++ b/trunk/src/Lexer.d	Sun Jul 08 11:57:03 2007 +0000
@@ -1426,6 +1426,31 @@
       idtable[k.str] = k;
   }
 
+  struct State
+  {
+    Lexer lexer;
+    char* scanPointer;
+    size_t errorLen;
+    static State opCall(Lexer lexer, char* p, size_t len)
+    {
+      State s;
+      s.lexer = lexer;
+      s.scanPointer = p;
+      s.errorLen = len;
+      return s;
+    }
+    void restore()
+    {
+      lexer.p = scanPointer;
+      lexer.errors = lexer.errors[0..errorLen];
+    }
+  }
+
+  State getState()
+  {
+    return State(this, p, errors.length);
+  }
+
   void peek(ref Token t)
   {
     // Because peeked tokens are not stored in a linked