summaryrefslogtreecommitdiffstats
path: root/source/slang/lexer.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2019-02-05 18:47:55 -0800
committerGitHub <noreply@github.com>2019-02-05 18:47:55 -0800
commitc6870dcbf6f720bfbfe7e38f7d9625d69bedde3d (patch)
treea81b861c6cbd345e323a1f5ee3bc4eec61646b96 /source/slang/lexer.cpp
parent13d7e34d8be4316c59bd3d00a1e5526215db6fa4 (diff)
parent3d62beab61490ce3e7ed60b48fd6a11c8eeb44ad (diff)
Merge branch 'master' into fix-nested-type-conformances
Diffstat (limited to 'source/slang/lexer.cpp')
-rw-r--r--source/slang/lexer.cpp33
1 files changed, 12 insertions, 21 deletions
diff --git a/source/slang/lexer.cpp b/source/slang/lexer.cpp
index 3d87dd7ea..b6745b15f 100644
--- a/source/slang/lexer.cpp
+++ b/source/slang/lexer.cpp
@@ -12,7 +12,7 @@
namespace Slang
{
- static Token GetEndOfFileToken()
+ Token TokenReader::GetEndOfFileToken()
{
return Token(TokenType::EndOfFile, UnownedStringSlice::fromLiteral(""), SourceLoc());
}
@@ -41,31 +41,19 @@ namespace Slang
{}
- Token TokenReader::PeekToken() const
+ Token& TokenReader::PeekToken()
{
- if (!mCursor)
- return GetEndOfFileToken();
-
- Token token = *mCursor;
- if (mCursor == mEnd)
- token.type = TokenType::EndOfFile;
- return token;
+ return nextToken;
}
TokenType TokenReader::PeekTokenType() const
{
- if (mCursor == mEnd)
- return TokenType::EndOfFile;
- SLANG_ASSERT(mCursor);
- return mCursor->type;
+ return nextToken.type;
}
SourceLoc TokenReader::PeekLoc() const
{
- if (!mCursor)
- return SourceLoc();
- SLANG_ASSERT(mCursor);
- return mCursor->loc;
+ return nextToken.loc;
}
Token TokenReader::AdvanceToken()
@@ -73,11 +61,14 @@ namespace Slang
if (!mCursor)
return GetEndOfFileToken();
- Token token = *mCursor;
- if (mCursor == mEnd)
- token.type = TokenType::EndOfFile;
- else
+ Token token = nextToken;
+ if (mCursor < mEnd)
+ {
mCursor++;
+ nextToken = *mCursor;
+ }
+ else
+ nextToken.type = TokenType::EndOfFile;
return token;
}