mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-23 04:28:30 +00:00
MCParser: add a single token lookahead
Some of the more complex directive and macro handling for GAS compatibility requires lookahead. Add a single token lookahead in the MCAsmLexer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201058 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a4122f4746
commit
537dca94b3
@ -47,6 +47,8 @@ public:
|
||||
virtual StringRef LexUntilEndOfStatement();
|
||||
StringRef LexUntilEndOfLine();
|
||||
|
||||
virtual const AsmToken peekTok(bool ShouldSkipSpace = true);
|
||||
|
||||
bool isAtStartOfComment(char Char);
|
||||
bool isAtStatementSeparator(const char *Ptr);
|
||||
|
||||
|
@ -160,6 +160,9 @@ public:
|
||||
return CurTok;
|
||||
}
|
||||
|
||||
/// peekTok - Look ahead at the next token to be lexed.
|
||||
virtual const AsmToken peekTok(bool ShouldSkipSpace = true) = 0;
|
||||
|
||||
/// getErrLoc - Get the current error location
|
||||
const SMLoc &getErrLoc() {
|
||||
return ErrLoc;
|
||||
|
@ -439,6 +439,28 @@ StringRef AsmLexer::LexUntilEndOfLine() {
|
||||
return StringRef(TokStart, CurPtr-TokStart);
|
||||
}
|
||||
|
||||
const AsmToken AsmLexer::peekTok(bool ShouldSkipSpace) {
|
||||
const char *SavedTokStart = TokStart;
|
||||
const char *SavedCurPtr = CurPtr;
|
||||
bool SavedAtStartOfLine = isAtStartOfLine;
|
||||
bool SavedSkipSpace = SkipSpace;
|
||||
|
||||
std::string SavedErr = getErr();
|
||||
SMLoc SavedErrLoc = getErrLoc();
|
||||
|
||||
SkipSpace = ShouldSkipSpace;
|
||||
AsmToken Token = LexToken();
|
||||
|
||||
SetError(SavedErrLoc, SavedErr);
|
||||
|
||||
SkipSpace = SavedSkipSpace;
|
||||
isAtStartOfLine = SavedAtStartOfLine;
|
||||
CurPtr = SavedCurPtr;
|
||||
TokStart = SavedTokStart;
|
||||
|
||||
return Token;
|
||||
}
|
||||
|
||||
bool AsmLexer::isAtStartOfComment(char Char) {
|
||||
// FIXME: This won't work for multi-character comment indicators like "//".
|
||||
return Char == *MAI.getCommentString();
|
||||
|
Loading…
Reference in New Issue
Block a user