summaryrefslogtreecommitdiff
path: root/lib/MC
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2014-02-09 23:29:24 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2014-02-09 23:29:24 +0000
commit537dca94b35e651248b57db03c9fece4c40bd5f9 (patch)
treec6559d7f5c823fa0e7a16091177455cb1735bfcd /lib/MC
parenta4122f4746f3d89530f59f84ce21e9eb3bbabb9e (diff)
downloadllvm-537dca94b35e651248b57db03c9fece4c40bd5f9.tar.gz
llvm-537dca94b35e651248b57db03c9fece4c40bd5f9.tar.bz2
llvm-537dca94b35e651248b57db03c9fece4c40bd5f9.tar.xz
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
Diffstat (limited to 'lib/MC')
-rw-r--r--lib/MC/MCParser/AsmLexer.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/MC/MCParser/AsmLexer.cpp b/lib/MC/MCParser/AsmLexer.cpp
index 88f1761789..a3b68d8380 100644
--- a/lib/MC/MCParser/AsmLexer.cpp
+++ b/lib/MC/MCParser/AsmLexer.cpp
@@ -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();