changeset 212:c9b9c979a620

- Fix: checking for _Z_. - Pointer p is not advanced anymore when returning TOK.EOF. - Simplified constructor of State and added member fileName to it.
author aziz
date Tue, 24 Jul 2007 10:56:04 +0000
parents d64413278bec
children b0ebde88d2d4
files trunk/src/Lexer.d
diffstat 1 files changed, 13 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/Lexer.d	Sun Jul 22 17:26:03 2007 +0000
+++ b/trunk/src/Lexer.d	Tue Jul 24 10:56:04 2007 +0000
@@ -74,13 +74,12 @@
     {
       t.start = p;
 
-      if (c == 0)
+      if (c == 0 || c == _Z_)
       {
-        assert(*p == 0);
-        ++p;
-        assert(p == end);
+        assert(*p == 0 || *p == _Z_);
         t.type = TOK.EOF;
         t.end = p;
+        assert(t.start == t.end);
         return;
       }
 
@@ -1441,15 +1440,17 @@
     Token token;
     char* scanPointer;
     int loc;
+    string fileName;
     size_t errorLen;
-    static State opCall(Lexer lexer, Token token, char* p, int loc, size_t len)
+    static State opCall(Lexer lx)
     {
       State s;
-      s.lexer = lexer;
-      s.token = token;
-      s.loc = loc;
-      s.scanPointer = p;
-      s.errorLen = len;
+      s.lexer = lx;
+      s.token = lx.token;
+      s.scanPointer = lx.p;
+      s.loc = lx.loc;
+      s.fileName = lx.fileName;
+      s.errorLen = lx.errors.length;
       return s;
     }
     void restore()
@@ -1457,13 +1458,14 @@
       lexer.p = scanPointer;
       lexer.token = token;
       lexer.loc = loc;
+      lexer.fileName = fileName;
       lexer.errors = lexer.errors[0..errorLen];
     }
   }
 
   State getState()
   {
-    return State(this, token, p, loc, errors.length);
+    return State(this);
   }
 
   void peek(ref Token t)