diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-02-09 23:29:24 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-02-09 23:29:24 +0000 |
commit | 537dca94b35e651248b57db03c9fece4c40bd5f9 (patch) | |
tree | c6559d7f5c823fa0e7a16091177455cb1735bfcd /lib/MC | |
parent | a4122f4746f3d89530f59f84ce21e9eb3bbabb9e (diff) | |
download | llvm-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.cpp | 22 |
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(); |