aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-07-28 17:58:44 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-07-28 17:58:44 +0000
commitcbbe2484418536264b1a26c517c16d505a61d5c8 (patch)
tree97f50a20143107d0885fc8de05176c3f26c5cd21 /tools
parentbf15e433b9ac6692e76aff0465cd93bb87f68989 (diff)
downloadexternal_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.cpp1
-rw-r--r--tools/llvm-mc/AsmLexer.h86
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();