Mercurial > projects > dang
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] == '=')