Mangled.h revision 3f69eacbb218a37390822c89d3675bd740590382
1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project//===-- Mangled.h -----------------------------------------------*- C++ -*-===// 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// The LLVM Compiler Infrastructure 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// This file is distributed under the University of Illinois Open Source 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// License. See LICENSE.TXT for details. 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project//===----------------------------------------------------------------------===// 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef liblldb_Mangled_h_ 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define liblldb_Mangled_h_ 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined(__cplusplus) 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "lldb/lldb-private.h" 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "lldb/Core/ConstString.h" 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <vector> 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectnamespace lldb_private { 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project//---------------------------------------------------------------------- 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/// @class Mangled Mangled.h "lldb/Core/Mangled.h" 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/// @brief A class that handles mangled names. 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/// 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/// Designed to handle mangled names. The demangled version of any names 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/// will be computed when the demangled name is accessed through the 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/// Demangled() acccessor. This class can also tokenize the demangled 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/// version of the name for powerful searches. Functions and symbols 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/// could make instances of this class for their mangled names. Uniqued 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/// string pools are used for the mangled, demangled, and token string 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/// values to allow for faster comparisons and for efficient memory use. 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project//---------------------------------------------------------------------- 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectclass Mangled 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{ 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpublic: 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //------------------------------------------------------------------ 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Token type enumerations. 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //------------------------------------------------------------------ 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project enum TokenType 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eInvalid, ///< Invalid token value (unitialized value) 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eNameSpace, ///< The token is a namespace name. 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eMethodName, ///< The token is a global or class method name 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eType, ///< The token is a language type 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eTemplate, ///< The token is a template class 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eTemplateBeg, ///< The token that indicates the start of a template parameters 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eTemplateEnd, ///< The token that indicates the end of a template parameters 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eParamsBeg, ///< The start of a method's parameters (the open parenthesis) 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eParamsEnd, ///< The end of a method's parameters (the open parenthesis) 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eQualifier, ///< A language qualifier 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eError ///< The token failed to parse 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project }; 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project enum NamePreference 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ePreferMangled, 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ePreferDemangled 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project }; 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //------------------------------------------------------------------ 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Mangled::Token structure 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// As demangled names get tokenized, they get broken up into chunks 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// that have type enumerations (TokenType) and string values. Some of 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// the tokens are scopes (eTemplateBeg, eTemplateEnd, eParamsBeg, 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// eParamsEnd) that can indicate depth and searches can take 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// advantage of these to match using wildcards. 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// For example the mangled string: 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// "_ZNSbIhSt11char_traitsIhESaIhEE5eraseEmm" 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Demangles to: 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// "std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> >::erase(unsigned long, unsigned long)" 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// And tokenizes to: 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eNameSpace ("std") 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eTemplate ("basic_string") 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eTemplateBeg () 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eType ("unsigned char") 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eNameSpace ("std") 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eTemplate ("char_traits") 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eTemplateBeg () 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eType ("unsigned char") 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eTemplateEnd () 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eNameSpace ("std") 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eTemplate ("allocator") 90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eTemplateBeg () 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eType ("unsigned char" 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eTemplateEnd () 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eTemplateEnd () 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eMethodName ("erase") 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eParamsBeg () 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eType ("unsigned long") 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eType ("unsigned long") 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li eParamsEnd () 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ///------------------------------------------------------------------ 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project struct Token 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Default constructor. 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Constructs this objet with an invalid token type and an 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// empty string. 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Token(); 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Equal to operator. 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Tests if this object is equal to \a rhs. 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @param[in] rhs 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// A const Mangled::Token object reference to compare 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// this object to. 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @return 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// \b true if this object is equal to \a rhs, \b false 121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// otherwise. 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project operator== (const Token& rhs) const; 125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Dump a description of this object to a Stream \a s. 128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @param[in] s 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// The stream to which to dump the object descripton. 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Dump (Stream *s) const; 134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Test if this token is a wildcard token. 137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @return 139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Returns \b true if this token is a wildcard, \b false 140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// otherwise. 141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool 143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project IsWildcard() const; 144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Members 147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project TokenType type; ///< The type of the token (Mangled::TokenType) 149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ConstString value; ///< The ConstString value associated with this token 150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project }; 151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //------------------------------------------------------------------ 153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// A collection of tokens. 154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// This class can be instantiated with a demangled names that can 156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// be used as a query using the 157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Mangled::TokenList::MatchesQuery(const TokenList&) const 158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// function. 159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //------------------------------------------------------------------ 160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project class TokenList 161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project public: 163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Construct with a demangled name. 165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// If demangled is valid the token list will parse up the 167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// demangled string it is given, else the object will 168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// initialize an empty token list. 169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project TokenList (const char *demangled = NULL); 171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Destructor 174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ~TokenList (); 176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Clear the token list. 179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void 181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Clear (); 182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Dump a description of this object to a Stream \a s. 185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @param[in] s 187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// The stream to which to dump the object descripton. 188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void 190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Dump (Stream *s) const; 191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Find a token by Mangled::TokenType. 194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Find the first token in the list that has \a token_type as 196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// its type. 197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const Token* 199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Find (TokenType token_type) const; 200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Get a token by index. 203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @return 205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// The token at index \a idx, or NULL if the index is out 206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// of range. 207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const Token* 209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project GetTokenAtIndex (uint32_t idx) const; 210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Given a token list, see if it matches this object's tokens. 213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// \a token_list can contain wild card values to enable powerful 214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// matching. Matching the std::string::erase(*) example that was 215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// tokenized above we could use a token list such as: 216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// token name 218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// ----------- ---------------------------------------- 219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// eNameSpace "std" 220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// eTemplate "basic_string" 221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// eTemplateBeg 222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// eInvalid "*" 223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// eTemplateEnd 224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// eMethodName "erase" 225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// eParamsBeg 226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// eInvalid "*" 227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// eParamsEnd 228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @return 230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Returns \b true if it \a token_list matches this 231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// object's tokens, \b false otherwise. 232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool 234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MatchesQuery (const TokenList& token_list) const; 235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Parses \a demangled into tokens. 238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// This allows complex comparisons to be done on demangled names. Comparisons can 240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// include wildcards at the namespace, method name, template, 241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// and template and parameter type levels. 242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Example queries include: 244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// "std::basic_string<*>" // Find all std::basic_string variants 245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// "std::basic_string<*>::erase(*)" // Find all std::basic_string::erase variants with any number of parameters 246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// "*::clear()" // Find all functions with a method name of 247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// // "clear" that are in any namespace that 248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// // have no parameters 249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// "::printf" // Find the printf function in the global namespace 250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// "printf" // Ditto 251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// "foo::*(int)" // Find all functions in the class or namespace "foo" that take a single integer argument 252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @return 254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// The number of tokens that were decoded, or zero if 255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// decoding fails. 256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project size_t 258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Parse (const char *demangled); 259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Get the number of tokens in the list. 262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @return 264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// The number of tokens in the token list. 265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project size_t 267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Size () const; 268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project protected: 270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // Member variables. 272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //-------------------------------------------------------------- 273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project typedef std::vector<Token> collection; ///< The collection type for a list of Token objects. 274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project collection m_tokens; ///< The token list. 275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project private: 276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DISALLOW_COPY_AND_ASSIGN (TokenList); 277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project }; 278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Default constructor. 281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Initialize with both mangled and demangled names empty. 283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Mangled (); 285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Construct with name. 288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Constructor with an optional string and a boolean indicating if it is 290656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// the mangled version. 291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @param[in] name 293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// The name to copy into this object. 294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @param[in] is_mangled 296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// If \b true then \a name is a mangled name, if \b false then 297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// \a name is demangled. 298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project explicit 300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Mangled (const char *name, bool is_mangled); 301656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 303656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Destructor 304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Releases its ref counts on the mangled and demangled strings that 306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// live in the global string pool. 307656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 308656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ~Mangled (); 309656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 310656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Convert to pointer operator. 312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// This allows code to check a Mangled object to see if it contains 314656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// a valid mangled name using code such as: 315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 316656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @code 317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Mangled mangled(...); 318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// if (mangled) 319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// { ... 320656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @endcode 321656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 322656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @return 323656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// A pointer to this object if either the mangled or unmangled 324656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// name is set, NULL otherwise. 325656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 326656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project operator 327656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void*() const; 328656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 329656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Logical NOT operator. 331656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// This allows code to check a Mangled object to see if it contains 333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// an empty mangled name using code such as: 334656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 335656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @code 336656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Mangled mangled(...); 337656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// if (!mangled) 338656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// { ... 339656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @endcode 340656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 341656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @return 342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Returns \b true if the object has an empty mangled and 343656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// unmangled name, \b false otherwise. 344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool 346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project operator!() const; 347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Clear the mangled and demangled values. 350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 351656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void 352656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Clear (); 353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 354656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Compare the mangled string values 356656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Compares the Mangled::GetName() string in \a lhs and \a rhs. 358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @param[in] lhs 360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// A const reference to the Left Hand Side object to compare. 361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @param[in] rhs 363656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// A const reference to the Right Hand Side object to compare. 364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 365656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @return 366656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li -1 if \a lhs is less than \a rhs 367656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li 0 if \a lhs is equal to \a rhs 368656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @li 1 if \a lhs is greater than \a rhs 369656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 370656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project static int 371656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Compare (const Mangled& lhs, const Mangled& rhs); 372656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Dump a description of this object to a Stream \a s. 375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 376656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Dump a Mangled object to stream \a s. We don't force our 377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// demangled name to be computed currently (we don't use the accessor). 378656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @param[in] s 380656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// The stream to which to dump the object descripton. 381656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 382656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void 383656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Dump (Stream *s) const; 384656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 385656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 386656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Dump a debug description of this object to a Stream \a s. 387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @param[in] s 389656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// The stream to which to dump the object descripton. 390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void 392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DumpDebug (Stream *s) const; 393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 394656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Demangled name get accessor. 396656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @return 398656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// A const reference to the demangled name string object. 399656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 400656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const ConstString& 401656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project GetDemangledName () const; 402656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void 404656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SetDemangledName (const char *name) 405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 406656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project m_demangled.SetCString (name); 407656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 408656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 409656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void 410656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SetMangledName (const char *name) 411656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 412656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project m_mangled.SetCString (name); 413656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 414656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 416656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Mangled name get accessor. 417656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 418656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @return 419656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// A reference to the mangled name string object. 420656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 421656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ConstString& 422656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project GetMangledName () 423656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 424656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return m_mangled; 425656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 426656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 427656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 428656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Mangled name get accessor. 429656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 430656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @return 431656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// A const reference to the mangled name string object. 432656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 433656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const ConstString& 434656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project GetMangledName () const 435656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 436656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return m_mangled; 437656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 438656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 439656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 440656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Best name get accessor. 441656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 442656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @param[in] preference 443656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Which name would you prefer to get? 444656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 445656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @return 446656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// A const reference to the the preferred name string object if this 447656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// object has a valid name of that kind, else a const reference to the 448656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// other name is returned. 449656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 450656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const ConstString& 451656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project GetName (NamePreference preference = ePreferDemangled) const; 452656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 453656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 454656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Check if "name" matches either the mangled or demangled name. 455656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 456656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @param[in] name 457656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// A name to match against both strings. 458656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 459656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @return 460656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// \b True if \a name matches either name, \b false otherwise. 461656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 462656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool 463656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NameMatches (const ConstString &name) const 464656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 465656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (m_mangled == name) 466656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return true; 467656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return GetDemangledName () == name; 468656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 469656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 470656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool 471656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NameMatches (const RegularExpression& regex) const; 472656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 473656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 474656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Generate the tokens from the demangled name. 475656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 476656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @param[out] tokens 477656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// A token list that will get filled in with the demangled tokens. 478656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 479656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @return 480656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// The number of tokens that were parsed and stored in \a tokens. 481656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 482656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project size_t 483656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project GetTokens (Mangled::TokenList &tokens) const; 484656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 485656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 486656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Get the memory cost of this object. 487656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 488656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Return the size in bytes that this object takes in memory. This 489656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// returns the size in bytes of this object, not any shared string 490656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// values it may refer to. 491656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 492656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @return 493656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// The number of bytes that this object occupies in memory. 494656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 495656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @see ConstString::StaticMemorySize () 496656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 497656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project size_t 498656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MemorySize () const; 499656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 500656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 501656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Set the string value in this object. 502656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 503656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// If \a is_mangled is \b true, then the mangled named is set to \a 504656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// name, else the demangled name is set to \a name. 505656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 506656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @param[in] name 507656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// The name to copy into this object. 508656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 509656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// @param[in] is_mangled 510656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// If \b true then \a name is a mangled name, if \b false then 511656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// \a name is demangled. 512656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 513656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void 514656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SetValue (const char *name, bool is_mangled); 515656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 516656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectprivate: 517656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 518656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Mangled member variables. 519656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project //---------------------------------------------------------------------- 520656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ConstString m_mangled; ///< The mangled version of the name 521656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mutable ConstString m_demangled; ///< Mutable so we can get it on demand with a const version of this object 522656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 523656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 524656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 525656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectStream& operator << (Stream& s, const Mangled& obj); 526656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectStream& operator << (Stream& s, const Mangled::TokenList& obj); 527656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectStream& operator << (Stream& s, const Mangled::Token& obj); 528656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 529656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} // namespace lldb_private 530656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 531656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif // #if defined(__cplusplus) 532656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif // liblldb_Mangled_h_ 533656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project