summaryrefslogtreecommitdiffstats
path: root/tools/llvm-mc/AsmLexer.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/llvm-mc/AsmLexer.h')
-rw-r--r--tools/llvm-mc/AsmLexer.h95
1 files changed, 28 insertions, 67 deletions
diff --git a/tools/llvm-mc/AsmLexer.h b/tools/llvm-mc/AsmLexer.h
index 6360b12..0696abc 100644
--- a/tools/llvm-mc/AsmLexer.h
+++ b/tools/llvm-mc/AsmLexer.h
@@ -14,6 +14,9 @@
#ifndef ASMLEXER_H
#define ASMLEXER_H
+#include "llvm/ADT/StringRef.h"
+#include "llvm/MC/MCAsmLexer.h"
+#include "llvm/MC/MCAsmInfo.h"
#include "llvm/Support/DataTypes.h"
#include <string>
#include <cassert>
@@ -22,95 +25,53 @@ namespace llvm {
class MemoryBuffer;
class SourceMgr;
class SMLoc;
-
-namespace asmtok {
- enum TokKind {
- // Markers
- Eof, Error,
-
- // String values.
- Identifier,
- Register,
- String,
-
- // Integer values.
- IntVal,
-
- // No-value.
- EndOfStatement,
- Colon,
- Plus, Minus, Tilde,
- Slash, // '/'
- LParen, RParen,
- Star, Comma, Dollar, Equal, EqualEqual,
-
- Pipe, PipePipe, Caret,
- Amp, AmpAmp, Exclaim, ExclaimEqual, Percent,
- Less, LessEqual, LessLess, LessGreater,
- Greater, GreaterEqual, GreaterGreater
- };
-}
+class MCAsmInfo;
/// AsmLexer - Lexer class for assembly files.
-class AsmLexer {
+class AsmLexer : public MCAsmLexer {
SourceMgr &SrcMgr;
+ const MCAsmInfo &MAI;
const char *CurPtr;
const MemoryBuffer *CurBuf;
- // A llvm::StringSet<>, which provides uniqued and null-terminated strings.
- void *TheStringSet;
- // Information about the current token.
const char *TokStart;
- asmtok::TokKind CurKind;
- const char *CurStrVal; // This is valid for Identifier.
- int64_t CurIntVal;
-
- /// CurBuffer - This is the current buffer index we're lexing from as managed
- /// by the SourceMgr object.
+
+ /// This is the current buffer index we're lexing from as managed by the
+ /// SourceMgr object.
int CurBuffer;
void operator=(const AsmLexer&); // DO NOT IMPLEMENT
AsmLexer(const AsmLexer&); // DO NOT IMPLEMENT
+
+protected:
+ /// LexToken - Read the next token and return its code.
+ virtual AsmToken LexToken();
+
public:
- AsmLexer(SourceMgr &SrcMgr);
+ AsmLexer(SourceMgr &SrcMgr, const MCAsmInfo &MAI);
~AsmLexer();
- asmtok::TokKind Lex() {
- return CurKind = LexToken();
- }
-
- asmtok::TokKind getKind() const { return CurKind; }
- bool is(asmtok::TokKind K) const { return CurKind == K; }
- bool isNot(asmtok::TokKind K) const { return CurKind != K; }
-
- const char *getCurStrVal() const {
- assert((CurKind == asmtok::Identifier || CurKind == asmtok::Register ||
- CurKind == asmtok::String) &&
- "This token doesn't have a string value");
- return CurStrVal;
- }
- int64_t getCurIntVal() const {
- assert(CurKind == asmtok::IntVal && "This token isn't an integer");
- return CurIntVal;
- }
-
SMLoc getLoc() const;
+ StringRef LexUntilEndOfStatement();
+
+ bool isAtStartOfComment(char Char);
+
+ /// EnterIncludeFile - Enter the specified file. This returns true on failure.
+ bool EnterIncludeFile(const std::string &Filename);
+
void PrintMessage(SMLoc Loc, const std::string &Msg, const char *Type) const;
private:
int getNextChar();
- asmtok::TokKind ReturnError(const char *Loc, const std::string &Msg);
+ AsmToken ReturnError(const char *Loc, const std::string &Msg);
- /// LexToken - Read the next token and return its code.
- asmtok::TokKind LexToken();
- asmtok::TokKind LexIdentifier();
- asmtok::TokKind LexPercent();
- asmtok::TokKind LexSlash();
- asmtok::TokKind LexLineComment();
- asmtok::TokKind LexDigit();
- asmtok::TokKind LexQuote();
+ AsmToken LexIdentifier();
+ AsmToken LexSlash();
+ AsmToken LexLineComment();
+ AsmToken LexDigit();
+ AsmToken LexQuote();
};
} // end namespace llvm
OpenPOWER on IntegriCloud