diff lexer/Lexer.d @ 189:75d0544ddc45

Better error handling on unexpected EOF.
author Anders Johnsen <skabet@gmail.com>
date Fri, 25 Jul 2008 13:50:01 +0200
parents e1e170c2cd44
children 85e492318bb6
line wrap: on
line diff
--- a/lexer/Lexer.d	Fri Jul 25 12:55:38 2008 +0200
+++ b/lexer/Lexer.d	Fri Jul 25 13:50:01 2008 +0200
@@ -81,27 +81,34 @@
       */
     Token next()
     {
+        Token res;
         switch (getNextChar)
         {
             case CharType.EOF:
-                SLoc loc;
-                return Token(Tok.EOF, loc+1, 0); 
+                return Token(Tok.EOF, last.location, 0); 
 
             case CharType.Whitespace:
                 position += 1;
-                return this.next;
+                res = this.next;
+                break;
 
             case CharType.Symbol:
-                return lexSymbol;
+                res = lexSymbol;
+                break;
 
             case CharType.Letter:
-                return lexLetter;
+                res = lexLetter;
+                break;
 
             case CharType.Number:
-                return lexNumber;
+                res = lexNumber;
+                break;
             case CharType.Other:
                 messages.report(UnexpectedTok, Loc(position)).fatal(ExitLevel.Lexer);
         }
+        if (res.type != Tok.EOF)
+            last = res;
+        return res;
     }
 
     /**
@@ -121,7 +128,9 @@
         return t;
     }
 
+    Token last;
 private:
+
     Token eq()
     {
         if(source[position] == '=')