[AsmParser] Allow tokens to be put back in to the token stream.

Differential Revision: http://reviews.llvm.org/D14252

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@252432 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Colin LeMahieu 2015-11-08 23:48:23 +00:00
parent 8b804197e0
commit 84774ba424
2 changed files with 13 additions and 5 deletions

View File

@ -118,7 +118,7 @@ public:
/// lexers.
class MCAsmLexer {
/// The current token, stored in the base class for faster access.
AsmToken CurTok;
SmallVector<AsmToken, 1> CurTok;
/// The location and description of the current error
SMLoc ErrLoc;
@ -148,7 +148,15 @@ public:
/// The lexer will continuosly return the end-of-file token once the end of
/// the main input file has been reached.
const AsmToken &Lex() {
return CurTok = LexToken();
assert(!CurTok.empty());
CurTok.erase(CurTok.begin());
if (CurTok.empty())
CurTok.emplace_back(LexToken());
return CurTok.front();
}
void UnLex(AsmToken const &Token) {
CurTok.insert(CurTok.begin(), Token);
}
virtual StringRef LexUntilEndOfStatement() = 0;
@ -158,7 +166,7 @@ public:
/// Get the current (last) lexed token.
const AsmToken &getTok() const {
return CurTok;
return CurTok[0];
}
/// Look ahead at the next token to be lexed.

View File

@ -12,8 +12,8 @@
using namespace llvm;
MCAsmLexer::MCAsmLexer() : CurTok(AsmToken::Error, StringRef()),
TokStart(nullptr), SkipSpace(true) {
MCAsmLexer::MCAsmLexer() : TokStart(nullptr), SkipSpace(true) {
CurTok.emplace_back(AsmToken::Error, StringRef());
}
MCAsmLexer::~MCAsmLexer() {