summaryrefslogtreecommitdiffstats
path: root/source/slang/lexer.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@google.com>2019-02-05 14:20:14 -0800
committerYong He <yonghe@google.com>2019-02-05 16:14:14 -0800
commitc198eaba351850fcb3d82c2f5117efc0e2e2bf1e (patch)
tree2b77d16367773207d25106c1d449565e02c6f077 /source/slang/lexer.cpp
parent314795b5d8ff5845624f93e152face325659dd0c (diff)
Allow generics to close with >>
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;
}