1642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//===-- CPPLanguageRuntime.h ---------------------------------------------------*- C++ -*-===// 2642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// 3642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// The LLVM Compiler Infrastructure 4642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// 5642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// This file is distributed under the University of Illinois Open Source 6642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// License. See LICENSE.TXT for details. 7642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// 8642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//===----------------------------------------------------------------------===// 9642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 10642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#ifndef liblldb_CPPLanguageRuntime_h_ 11642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#define liblldb_CPPLanguageRuntime_h_ 12642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 13642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// C Includes 14642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// C++ Includes 15bad9753828b6e0e415e38094bb9627e41d57874cEnrico Granata#include <vector> 16642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// Other libraries and framework includes 17642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// Project includes 18642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#include "lldb/Core/PluginInterface.h" 19642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#include "lldb/lldb-private.h" 20642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#include "lldb/Target/LanguageRuntime.h" 21642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 22642036f22366d47ea8e6f8498bedb92b88f7f79fJim Inghamnamespace lldb_private { 23642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 24642036f22366d47ea8e6f8498bedb92b88f7f79fJim Inghamclass CPPLanguageRuntime : 25642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham public LanguageRuntime 26642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham{ 27642036f22366d47ea8e6f8498bedb92b88f7f79fJim Inghampublic: 28296b06d325413723f5aac5988eed977b278a7807Greg Clayton 29296b06d325413723f5aac5988eed977b278a7807Greg Clayton class MethodName 30296b06d325413723f5aac5988eed977b278a7807Greg Clayton { 31296b06d325413723f5aac5988eed977b278a7807Greg Clayton public: 32296b06d325413723f5aac5988eed977b278a7807Greg Clayton enum Type 33296b06d325413723f5aac5988eed977b278a7807Greg Clayton { 34296b06d325413723f5aac5988eed977b278a7807Greg Clayton eTypeInvalid, 35296b06d325413723f5aac5988eed977b278a7807Greg Clayton eTypeUnknownMethod, 36296b06d325413723f5aac5988eed977b278a7807Greg Clayton eTypeClassMethod, 37296b06d325413723f5aac5988eed977b278a7807Greg Clayton eTypeInstanceMethod 38296b06d325413723f5aac5988eed977b278a7807Greg Clayton }; 39296b06d325413723f5aac5988eed977b278a7807Greg Clayton 40296b06d325413723f5aac5988eed977b278a7807Greg Clayton MethodName () : 41296b06d325413723f5aac5988eed977b278a7807Greg Clayton m_full(), 42296b06d325413723f5aac5988eed977b278a7807Greg Clayton m_basename(), 43296b06d325413723f5aac5988eed977b278a7807Greg Clayton m_context(), 44296b06d325413723f5aac5988eed977b278a7807Greg Clayton m_arguments(), 45296b06d325413723f5aac5988eed977b278a7807Greg Clayton m_qualifiers(), 46296b06d325413723f5aac5988eed977b278a7807Greg Clayton m_type (eTypeInvalid), 47296b06d325413723f5aac5988eed977b278a7807Greg Clayton m_parsed (false), 48296b06d325413723f5aac5988eed977b278a7807Greg Clayton m_parse_error (false) 49296b06d325413723f5aac5988eed977b278a7807Greg Clayton { 50296b06d325413723f5aac5988eed977b278a7807Greg Clayton } 51296b06d325413723f5aac5988eed977b278a7807Greg Clayton 52296b06d325413723f5aac5988eed977b278a7807Greg Clayton MethodName (const ConstString &s) : 53296b06d325413723f5aac5988eed977b278a7807Greg Clayton m_full(s), 54296b06d325413723f5aac5988eed977b278a7807Greg Clayton m_basename(), 55296b06d325413723f5aac5988eed977b278a7807Greg Clayton m_context(), 56296b06d325413723f5aac5988eed977b278a7807Greg Clayton m_arguments(), 57296b06d325413723f5aac5988eed977b278a7807Greg Clayton m_qualifiers(), 58296b06d325413723f5aac5988eed977b278a7807Greg Clayton m_type (eTypeInvalid), 59296b06d325413723f5aac5988eed977b278a7807Greg Clayton m_parsed (false), 60296b06d325413723f5aac5988eed977b278a7807Greg Clayton m_parse_error (false) 61296b06d325413723f5aac5988eed977b278a7807Greg Clayton { 62296b06d325413723f5aac5988eed977b278a7807Greg Clayton } 63296b06d325413723f5aac5988eed977b278a7807Greg Clayton 64296b06d325413723f5aac5988eed977b278a7807Greg Clayton void 65296b06d325413723f5aac5988eed977b278a7807Greg Clayton Clear(); 66296b06d325413723f5aac5988eed977b278a7807Greg Clayton 67296b06d325413723f5aac5988eed977b278a7807Greg Clayton bool 68296b06d325413723f5aac5988eed977b278a7807Greg Clayton IsValid () const 69296b06d325413723f5aac5988eed977b278a7807Greg Clayton { 70296b06d325413723f5aac5988eed977b278a7807Greg Clayton if (m_parse_error) 71296b06d325413723f5aac5988eed977b278a7807Greg Clayton return false; 72296b06d325413723f5aac5988eed977b278a7807Greg Clayton if (m_type == eTypeInvalid) 73296b06d325413723f5aac5988eed977b278a7807Greg Clayton return false; 74296b06d325413723f5aac5988eed977b278a7807Greg Clayton return (bool)m_full; 75296b06d325413723f5aac5988eed977b278a7807Greg Clayton } 76296b06d325413723f5aac5988eed977b278a7807Greg Clayton 77296b06d325413723f5aac5988eed977b278a7807Greg Clayton Type 78296b06d325413723f5aac5988eed977b278a7807Greg Clayton GetType () const 79296b06d325413723f5aac5988eed977b278a7807Greg Clayton { 80296b06d325413723f5aac5988eed977b278a7807Greg Clayton return m_type; 81296b06d325413723f5aac5988eed977b278a7807Greg Clayton } 82296b06d325413723f5aac5988eed977b278a7807Greg Clayton 83296b06d325413723f5aac5988eed977b278a7807Greg Clayton const ConstString & 84296b06d325413723f5aac5988eed977b278a7807Greg Clayton GetFullName () const 85296b06d325413723f5aac5988eed977b278a7807Greg Clayton { 86296b06d325413723f5aac5988eed977b278a7807Greg Clayton return m_full; 87296b06d325413723f5aac5988eed977b278a7807Greg Clayton } 88296b06d325413723f5aac5988eed977b278a7807Greg Clayton 8983d90c5e68f4a977150c6791a49ade7a23c92177Greg Clayton llvm::StringRef 90296b06d325413723f5aac5988eed977b278a7807Greg Clayton GetBasename (); 91296b06d325413723f5aac5988eed977b278a7807Greg Clayton 92296b06d325413723f5aac5988eed977b278a7807Greg Clayton llvm::StringRef 93296b06d325413723f5aac5988eed977b278a7807Greg Clayton GetContext (); 94296b06d325413723f5aac5988eed977b278a7807Greg Clayton 95296b06d325413723f5aac5988eed977b278a7807Greg Clayton llvm::StringRef 96296b06d325413723f5aac5988eed977b278a7807Greg Clayton GetArguments (); 97296b06d325413723f5aac5988eed977b278a7807Greg Clayton 98296b06d325413723f5aac5988eed977b278a7807Greg Clayton llvm::StringRef 99296b06d325413723f5aac5988eed977b278a7807Greg Clayton GetQualifiers (); 100296b06d325413723f5aac5988eed977b278a7807Greg Clayton 101296b06d325413723f5aac5988eed977b278a7807Greg Clayton protected: 102296b06d325413723f5aac5988eed977b278a7807Greg Clayton void 103296b06d325413723f5aac5988eed977b278a7807Greg Clayton Parse(); 104296b06d325413723f5aac5988eed977b278a7807Greg Clayton 105296b06d325413723f5aac5988eed977b278a7807Greg Clayton ConstString m_full; // Full name: "lldb::SBTarget::GetBreakpointAtIndex(unsigned int) const" 10683d90c5e68f4a977150c6791a49ade7a23c92177Greg Clayton llvm::StringRef m_basename; // Basename: "GetBreakpointAtIndex" 107296b06d325413723f5aac5988eed977b278a7807Greg Clayton llvm::StringRef m_context; // Decl context: "lldb::SBTarget" 108296b06d325413723f5aac5988eed977b278a7807Greg Clayton llvm::StringRef m_arguments; // Arguments: "(unsigned int)" 109296b06d325413723f5aac5988eed977b278a7807Greg Clayton llvm::StringRef m_qualifiers; // Qualifiers: "const" 110296b06d325413723f5aac5988eed977b278a7807Greg Clayton Type m_type; 111296b06d325413723f5aac5988eed977b278a7807Greg Clayton bool m_parsed; 112296b06d325413723f5aac5988eed977b278a7807Greg Clayton bool m_parse_error; 113296b06d325413723f5aac5988eed977b278a7807Greg Clayton }; 114296b06d325413723f5aac5988eed977b278a7807Greg Clayton 115642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham virtual 116642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham ~CPPLanguageRuntime(); 117642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 118642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham virtual lldb::LanguageType 119642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham GetLanguageType () const 120642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham { 121642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham return lldb::eLanguageTypeC_plus_plus; 122642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham } 123642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 124642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham virtual bool 125642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham IsVTableName (const char *name) = 0; 126642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 127b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham virtual bool 1280de37195f17fefb536157b3296a18999116b8125Jim Ingham GetObjectDescription (Stream &str, ValueObject &object); 129b66cd074ec097b5b0a6f2ce292f5072aa1217ca6Jim Ingham 130324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham virtual bool 131324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham GetObjectDescription (Stream &str, Value &value, ExecutionContextScope *exe_scope); 132324067bc91877dbbd6ec3a8663914fa3dbb7e3c9Jim Ingham 1338b7b2276132c7353cabd22000287b42badc26613Jim Ingham static bool 1348b7b2276132c7353cabd22000287b42badc26613Jim Ingham IsCPPMangledName(const char *name); 1358b7b2276132c7353cabd22000287b42badc26613Jim Ingham 1368b7b2276132c7353cabd22000287b42badc26613Jim Ingham static bool 1378b7b2276132c7353cabd22000287b42badc26613Jim Ingham StripNamespacesFromVariableName (const char *name, const char *&base_name_start, const char *&base_name_end); 138bad9753828b6e0e415e38094bb9627e41d57874cEnrico Granata 139bad9753828b6e0e415e38094bb9627e41d57874cEnrico Granata // in some cases, compilers will output different names for one same type. when tht happens, it might be impossible 140bad9753828b6e0e415e38094bb9627e41d57874cEnrico Granata // to construct SBType objects for a valid type, because the name that is available is not the same as the name that 141bad9753828b6e0e415e38094bb9627e41d57874cEnrico Granata // can be used as a search key in FindTypes(). the equivalents map here is meant to return possible alternative names 142bad9753828b6e0e415e38094bb9627e41d57874cEnrico Granata // for a type through which a search can be conducted. Currently, this is only enabled for C++ but can be extended 143bad9753828b6e0e415e38094bb9627e41d57874cEnrico Granata // to ObjC or other languages if necessary 144bad9753828b6e0e415e38094bb9627e41d57874cEnrico Granata static uint32_t 145bad9753828b6e0e415e38094bb9627e41d57874cEnrico Granata FindEquivalentNames(ConstString type_name, std::vector<ConstString>& equivalents); 1468b7b2276132c7353cabd22000287b42badc26613Jim Ingham 147642036f22366d47ea8e6f8498bedb92b88f7f79fJim Inghamprotected: 148642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham //------------------------------------------------------------------ 149642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham // Classes that inherit from CPPLanguageRuntime can see and modify these 150642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham //------------------------------------------------------------------ 151642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham CPPLanguageRuntime(Process *process); 152642036f22366d47ea8e6f8498bedb92b88f7f79fJim Inghamprivate: 153642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham DISALLOW_COPY_AND_ASSIGN (CPPLanguageRuntime); 154642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham}; 155642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 156642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham} // namespace lldb_private 157642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham 158642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#endif // liblldb_CPPLanguageRuntime_h_ 159