AK: Add GenericLexer::retreat()

This allows going back one character at a time, and then re-consume
previously consumed chars.
The code I need this for looks something like this:

    ASSERT(lexer.consume_specific('\\'));
    if (lexer.next_is("foo"))
        ...
    lexer.retreat();
    lexer.consume_escaped_character();  // This expects lexer.peek() == '\\'
This commit is contained in:
Linus Groh 2020-10-28 09:29:03 +00:00 committed by Andreas Kling
parent ffd1e4831e
commit 1daa5158eb
2 changed files with 9 additions and 0 deletions

View file

@ -76,6 +76,13 @@ bool GenericLexer::next_is(const char* expected) const
return true;
}
// Go back to the previous character
void GenericLexer::retreat()
{
ASSERT(m_index > 0);
m_index--;
}
// Consume a character and advance the parser index
char GenericLexer::consume()
{

View file

@ -48,6 +48,8 @@ public:
bool next_is(StringView) const;
bool next_is(const char*) const;
void retreat();
char consume();
bool consume_specific(char);
bool consume_specific(StringView);