diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-07-28 17:58:44 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-07-28 17:58:44 +0000 |
commit | cbbe2484418536264b1a26c517c16d505a61d5c8 (patch) | |
tree | 97f50a20143107d0885fc8de05176c3f26c5cd21 /tools | |
parent | bf15e433b9ac6692e76aff0465cd93bb87f68989 (diff) | |
download | external_llvm-cbbe2484418536264b1a26c517c16d505a61d5c8.zip external_llvm-cbbe2484418536264b1a26c517c16d505a61d5c8.tar.gz external_llvm-cbbe2484418536264b1a26c517c16d505a61d5c8.tar.bz2 |
Expose Tokens to target specific assembly parsers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77337 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r-- | tools/llvm-mc/AsmLexer.cpp | 1 | ||||
-rw-r--r-- | tools/llvm-mc/AsmLexer.h | 86 |
2 files changed, 6 insertions, 81 deletions
diff --git a/tools/llvm-mc/AsmLexer.cpp b/tools/llvm-mc/AsmLexer.cpp index 09fb34d..28b0c1e 100644 --- a/tools/llvm-mc/AsmLexer.cpp +++ b/tools/llvm-mc/AsmLexer.cpp @@ -24,7 +24,6 @@ AsmLexer::AsmLexer(SourceMgr &SM) : SrcMgr(SM) { CurBuffer = 0; CurBuf = SrcMgr.getMemoryBuffer(CurBuffer); CurPtr = CurBuf->getBufferStart(); - CurTok = AsmToken(AsmToken::Error, StringRef(CurPtr, 0)); TokStart = 0; } diff --git a/tools/llvm-mc/AsmLexer.h b/tools/llvm-mc/AsmLexer.h index 2918e43..4200137 100644 --- a/tools/llvm-mc/AsmLexer.h +++ b/tools/llvm-mc/AsmLexer.h @@ -25,69 +25,6 @@ class MemoryBuffer; class SourceMgr; class SMLoc; -/// AsmToken - Target independent representation for an assembler token. -struct AsmToken { - enum TokenKind { - // Markers - Eof, Error, - - // String values. - Identifier, - Register, - String, - - // Integer values. - Integer, - - // 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 - }; - - TokenKind Kind; - - /// A reference to the entire token contents; this is always a pointer into - /// a memory buffer owned by the source manager. - StringRef Str; - - int64_t IntVal; - -public: - AsmToken() {} - AsmToken(TokenKind _Kind, const StringRef &_Str, int64_t _IntVal = 0) - : Kind(_Kind), Str(_Str), IntVal(_IntVal) {} - - TokenKind getKind() const { return Kind; } - bool is(TokenKind K) const { return Kind == K; } - bool isNot(TokenKind K) const { return Kind != K; } - - SMLoc getLoc() const; - - /// getString - Get the string for the current token, this includes all - /// characters (for example, the quotes on strings) in the token. - /// - /// The returned StringRef points into the source manager's memory buffer, and - /// is safe to store across calls to Lex(). - StringRef getString() const { return Str; } - - // FIXME: Don't compute this in advance, it makes every token larger, and is - // also not generally what we want (it is nicer for recovery etc. to lex 123br - // as a single token, then diagnose as an invalid number). - int64_t getIntVal() const { - assert(Kind == Integer && "This token isn't an integer"); - return IntVal; - } -}; - /// AsmLexer - Lexer class for assembly files. class AsmLexer : public MCAsmLexer { SourceMgr &SrcMgr; @@ -97,32 +34,23 @@ class AsmLexer : public MCAsmLexer { const char *TokStart; - /// The current token. - AsmToken CurTok; - /// 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(); - const AsmToken &Lex() { - return CurTok = LexToken(); - } - - AsmToken::TokenKind getKind() const { return CurTok.getKind(); } - bool is(AsmToken::TokenKind K) const { return CurTok.is(K); } - bool isNot(AsmToken::TokenKind K) const { return CurTok.isNot(K); } - SMLoc getLoc() const; - - /// getTok - Return a reference to the current (last) lexed token. - const AsmToken &getTok() const { return CurTok; } - + /// EnterIncludeFile - Enter the specified file. This returns true on failure. bool EnterIncludeFile(const std::string &Filename); @@ -132,8 +60,6 @@ private: int getNextChar(); AsmToken ReturnError(const char *Loc, const std::string &Msg); - /// LexToken - Read the next token and return its code. - AsmToken LexToken(); AsmToken LexIdentifier(); AsmToken LexPercent(); AsmToken LexSlash(); |