summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2015-08-17 14:35:25 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2015-08-17 14:35:25 +0000
commit1ee99a8b46839073361f72e4179f1bb9b7aad74d (patch)
tree8f7c267c75ff5caa9850ef1efcee4025f216864b /llvm/lib
parentaa3d810b5f95bf8966d8c82535329a499be0528c (diff)
downloadbcm5719-llvm-1ee99a8b46839073361f72e4179f1bb9b7aad74d.tar.gz
bcm5719-llvm-1ee99a8b46839073361f72e4179f1bb9b7aad74d.zip
Extend MCAsmLexer so that it can peek forward several tokens
This commit adds a virtual `peekTokens()` function to `MCAsmLexer` which can peek forward an arbitrary number of tokens. It also makes the `peekTok()` method call `peekTokens()` method, but only requesting one token. The idea is to better support targets which more more ambiguous assembly syntaxes. Patch by Dylan McKay! llvm-svn: 245221
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/MC/MCParser/AsmLexer.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/llvm/lib/MC/MCParser/AsmLexer.cpp b/llvm/lib/MC/MCParser/AsmLexer.cpp
index b983d9995f4..36c19202685 100644
--- a/llvm/lib/MC/MCParser/AsmLexer.cpp
+++ b/llvm/lib/MC/MCParser/AsmLexer.cpp
@@ -436,7 +436,8 @@ StringRef AsmLexer::LexUntilEndOfLine() {
return StringRef(TokStart, CurPtr-TokStart);
}
-const AsmToken AsmLexer::peekTok(bool ShouldSkipSpace) {
+size_t AsmLexer::peekTokens(MutableArrayRef<AsmToken> Buf,
+ bool ShouldSkipSpace) {
const char *SavedTokStart = TokStart;
const char *SavedCurPtr = CurPtr;
bool SavedAtStartOfLine = isAtStartOfLine;
@@ -446,7 +447,16 @@ const AsmToken AsmLexer::peekTok(bool ShouldSkipSpace) {
SMLoc SavedErrLoc = getErrLoc();
SkipSpace = ShouldSkipSpace;
- AsmToken Token = LexToken();
+
+ size_t ReadCount;
+ for (ReadCount = 0; ReadCount < Buf.size(); ++ReadCount) {
+ AsmToken Token = LexToken();
+
+ Buf[ReadCount] = Token;
+
+ if (Token.is(AsmToken::Eof))
+ break;
+ }
SetError(SavedErrLoc, SavedErr);
@@ -455,7 +465,7 @@ const AsmToken AsmLexer::peekTok(bool ShouldSkipSpace) {
CurPtr = SavedCurPtr;
TokStart = SavedTokStart;
- return Token;
+ return ReadCount;
}
bool AsmLexer::isAtStartOfComment(const char *Ptr) {
OpenPOWER on IntegriCloud