summaryrefslogtreecommitdiffstats
path: root/source/slang/lexer.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2019-02-05 18:46:04 -0800
committerGitHub <noreply@github.com>2019-02-05 18:46:04 -0800
commit3d62beab61490ce3e7ed60b48fd6a11c8eeb44ad (patch)
treea3971c4c6217914e9dc4c12917f26a7eb6ac28b2 /source/slang/lexer.cpp
parent60cc9f24c4bec54561bea873ee943aa3d0973dc2 (diff)
parenta39fd3d3f67df28b9206c9f08bc7d046f9b0db59 (diff)
Merge pull request #830 from csyonghe/gencloser
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;
}