| //===-EDToken.h - LLVM Enhanced Disassembler --------------------*- C++ -*-===// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // This file defines the interface for the Enhanced Disassembly library's token | |
| // class. The token is responsible for vending information about the token, | |
| // such as its type and logical value. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #ifndef LLVM_EDTOKEN_H | |
| #define LLVM_EDTOKEN_H | |
| #include "llvm/ADT/StringRef.h" | |
| #include "llvm/Support/DataTypes.h" | |
| #include <string> | |
| #include <vector> | |
| namespace llvm { | |
| struct EDDisassembler; | |
| /// EDToken - Encapsulates a single token, which can provide a string | |
| /// representation of itself or interpret itself in various ways, depending | |
| /// on the token type. | |
| struct EDToken { | |
| enum tokenType { | |
| kTokenWhitespace, | |
| kTokenOpcode, | |
| kTokenLiteral, | |
| kTokenRegister, | |
| kTokenPunctuation | |
| }; | |
| /// The parent disassembler | |
| EDDisassembler &Disassembler; | |
| /// The token's string representation | |
| llvm::StringRef Str; | |
| /// The token's string representation, but in a form suitable for export | |
| std::string PermStr; | |
| /// The type of the token, as exposed through the external API | |
| enum tokenType Type; | |
| /// The type of the token, as recorded by the syntax-specific tokenizer | |
| uint64_t LocalType; | |
| /// The operand corresponding to the token, or (unsigned int)-1 if not | |
| /// part of an operand. | |
| int OperandID; | |
| /// The sign if the token is a literal (1 if negative, 0 otherwise) | |
| bool LiteralSign; | |
| /// The absolute value if the token is a literal | |
| uint64_t LiteralAbsoluteValue; | |
| /// The LLVM register ID if the token is a register name | |
| unsigned RegisterID; | |
| /// Constructor - Initializes an EDToken with the information common to all | |
| /// tokens | |
| /// | |
| /// @arg str - The string corresponding to the token | |
| /// @arg type - The token's type as exposed through the public API | |
| /// @arg localType - The token's type as recorded by the tokenizer | |
| /// @arg disassembler - The disassembler responsible for the token | |
| EDToken(llvm::StringRef str, | |
| enum tokenType type, | |
| uint64_t localType, | |
| EDDisassembler &disassembler); | |
| /// makeLiteral - Adds the information specific to a literal | |
| /// @arg sign - The sign of the literal (1 if negative, 0 | |
| /// otherwise) | |
| /// | |
| /// @arg absoluteValue - The absolute value of the literal | |
| void makeLiteral(bool sign, uint64_t absoluteValue); | |
| /// makeRegister - Adds the information specific to a register | |
| /// | |
| /// @arg registerID - The LLVM register ID | |
| void makeRegister(unsigned registerID); | |
| /// setOperandID - Links the token to a numbered operand | |
| /// | |
| /// @arg operandID - The operand ID to link to | |
| void setOperandID(int operandID); | |
| ~EDToken(); | |
| /// type - Returns the public type of the token | |
| enum tokenType type() const; | |
| /// localType - Returns the tokenizer-specific type of the token | |
| uint64_t localType() const; | |
| /// string - Returns the string representation of the token | |
| llvm::StringRef string() const; | |
| /// operandID - Returns the operand ID of the token | |
| int operandID() const; | |
| /// literalSign - Returns the sign of the token | |
| /// (1 if negative, 0 if positive or unsigned, -1 if it is not a literal) | |
| int literalSign() const; | |
| /// literalAbsoluteValue - Retrieves the absolute value of the token, and | |
| /// returns -1 if the token is not a literal | |
| /// @arg value - A reference to a value that is filled in with the absolute | |
| /// value, if it is valid | |
| int literalAbsoluteValue(uint64_t &value) const; | |
| /// registerID - Retrieves the register ID of the token, and returns -1 if the | |
| /// token is not a register | |
| /// | |
| /// @arg registerID - A reference to a value that is filled in with the | |
| /// register ID, if it is valid | |
| int registerID(unsigned ®isterID) const; | |
| /// tokenize - Tokenizes a string using the platform- and syntax-specific | |
| /// tokenizer, and returns 0 on success (-1 on failure) | |
| /// | |
| /// @arg tokens - A vector that will be filled in with pointers to | |
| /// allocated tokens | |
| /// @arg str - The string, as outputted by the AsmPrinter | |
| /// @arg operandOrder - The order of the operands from the operandFlags array | |
| /// as they appear in str | |
| /// @arg disassembler - The disassembler for the desired target and | |
| // assembly syntax | |
| static int tokenize(std::vector<EDToken*> &tokens, | |
| std::string &str, | |
| const signed char *operandOrder, | |
| EDDisassembler &disassembler); | |
| /// getString - Directs a character pointer to the string, returning 0 on | |
| /// success (-1 on failure) | |
| /// @arg buf - A reference to a pointer that is set to point to the string. | |
| /// The string is still owned by the token. | |
| int getString(const char*& buf); | |
| }; | |
| } // end namespace llvm | |
| #endif |