Mercurial > projects > dil
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