diff options
| author | Yong He <yonghe@outlook.com> | 2019-02-05 18:47:55 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-02-05 18:47:55 -0800 |
| commit | c6870dcbf6f720bfbfe7e38f7d9625d69bedde3d (patch) | |
| tree | a81b861c6cbd345e323a1f5ee3bc4eec61646b96 /source/slang/lexer.h | |
| parent | 13d7e34d8be4316c59bd3d00a1e5526215db6fa4 (diff) | |
| parent | 3d62beab61490ce3e7ed60b48fd6a11c8eeb44ad (diff) | |
Merge branch 'master' into fix-nested-type-conformances
Diffstat (limited to 'source/slang/lexer.h')
| -rw-r--r-- | source/slang/lexer.h | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/source/slang/lexer.h b/source/slang/lexer.h index 593e07c22..8587cc904 100644 --- a/source/slang/lexer.h +++ b/source/slang/lexer.h @@ -38,18 +38,37 @@ namespace Slang struct TokenReader { + Token nextToken; TokenReader(); explicit TokenReader(TokenSpan const& tokens) : mCursor(tokens.begin()) , mEnd (tokens.end ()) + , nextToken(tokens.begin() ? *tokens.begin() : GetEndOfFileToken()) {} explicit TokenReader(TokenList const& tokens) : mCursor(tokens.begin()) , mEnd (tokens.end ()) + , nextToken(tokens.begin() ? *tokens.begin() : GetEndOfFileToken()) {} - + struct ParsingCursor + { + Token nextToken; + Token* tokenReaderCursor = nullptr; + }; + ParsingCursor getCursor() + { + ParsingCursor rs; + rs.nextToken = nextToken; + rs.tokenReaderCursor = mCursor; + return rs; + } + void setCursor(ParsingCursor cursor) + { + mCursor = cursor.tokenReaderCursor; + nextToken = cursor.nextToken; + } bool IsAtEnd() const { return mCursor == mEnd; } - Token PeekToken() const; + Token& PeekToken(); TokenType PeekTokenType() const; SourceLoc PeekLoc() const; @@ -59,6 +78,7 @@ namespace Slang Token* mCursor; Token* mEnd; + static Token GetEndOfFileToken(); }; typedef unsigned int LexerFlags; |
