1254721Semaste//===-- CPPLanguageRuntime.h ---------------------------------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#ifndef liblldb_CPPLanguageRuntime_h_ 11254721Semaste#define liblldb_CPPLanguageRuntime_h_ 12254721Semaste 13254721Semaste// C Includes 14254721Semaste// C++ Includes 15254721Semaste#include <vector> 16254721Semaste// Other libraries and framework includes 17254721Semaste// Project includes 18254721Semaste#include "lldb/Core/PluginInterface.h" 19254721Semaste#include "lldb/lldb-private.h" 20254721Semaste#include "lldb/Target/LanguageRuntime.h" 21254721Semaste 22254721Semastenamespace lldb_private { 23254721Semaste 24254721Semasteclass CPPLanguageRuntime : 25254721Semaste public LanguageRuntime 26254721Semaste{ 27254721Semastepublic: 28254721Semaste 29254721Semaste class MethodName 30254721Semaste { 31254721Semaste public: 32254721Semaste enum Type 33254721Semaste { 34254721Semaste eTypeInvalid, 35254721Semaste eTypeUnknownMethod, 36254721Semaste eTypeClassMethod, 37254721Semaste eTypeInstanceMethod 38254721Semaste }; 39254721Semaste 40254721Semaste MethodName () : 41254721Semaste m_full(), 42254721Semaste m_basename(), 43254721Semaste m_context(), 44254721Semaste m_arguments(), 45254721Semaste m_qualifiers(), 46254721Semaste m_type (eTypeInvalid), 47254721Semaste m_parsed (false), 48254721Semaste m_parse_error (false) 49254721Semaste { 50254721Semaste } 51254721Semaste 52254721Semaste MethodName (const ConstString &s) : 53254721Semaste m_full(s), 54254721Semaste m_basename(), 55254721Semaste m_context(), 56254721Semaste m_arguments(), 57254721Semaste m_qualifiers(), 58254721Semaste m_type (eTypeInvalid), 59254721Semaste m_parsed (false), 60254721Semaste m_parse_error (false) 61254721Semaste { 62254721Semaste } 63254721Semaste 64254721Semaste void 65254721Semaste Clear(); 66254721Semaste 67254721Semaste bool 68254721Semaste IsValid () const 69254721Semaste { 70254721Semaste if (m_parse_error) 71254721Semaste return false; 72254721Semaste if (m_type == eTypeInvalid) 73254721Semaste return false; 74254721Semaste return (bool)m_full; 75254721Semaste } 76254721Semaste 77254721Semaste Type 78254721Semaste GetType () const 79254721Semaste { 80254721Semaste return m_type; 81254721Semaste } 82254721Semaste 83254721Semaste const ConstString & 84254721Semaste GetFullName () const 85254721Semaste { 86254721Semaste return m_full; 87254721Semaste } 88254721Semaste 89254721Semaste llvm::StringRef 90254721Semaste GetBasename (); 91254721Semaste 92254721Semaste llvm::StringRef 93254721Semaste GetContext (); 94254721Semaste 95254721Semaste llvm::StringRef 96254721Semaste GetArguments (); 97254721Semaste 98254721Semaste llvm::StringRef 99254721Semaste GetQualifiers (); 100254721Semaste 101254721Semaste protected: 102254721Semaste void 103254721Semaste Parse(); 104254721Semaste 105254721Semaste ConstString m_full; // Full name: "lldb::SBTarget::GetBreakpointAtIndex(unsigned int) const" 106254721Semaste llvm::StringRef m_basename; // Basename: "GetBreakpointAtIndex" 107254721Semaste llvm::StringRef m_context; // Decl context: "lldb::SBTarget" 108254721Semaste llvm::StringRef m_arguments; // Arguments: "(unsigned int)" 109254721Semaste llvm::StringRef m_qualifiers; // Qualifiers: "const" 110254721Semaste Type m_type; 111254721Semaste bool m_parsed; 112254721Semaste bool m_parse_error; 113254721Semaste }; 114254721Semaste 115254721Semaste virtual 116254721Semaste ~CPPLanguageRuntime(); 117254721Semaste 118254721Semaste virtual lldb::LanguageType 119254721Semaste GetLanguageType () const 120254721Semaste { 121254721Semaste return lldb::eLanguageTypeC_plus_plus; 122254721Semaste } 123254721Semaste 124254721Semaste virtual bool 125254721Semaste IsVTableName (const char *name) = 0; 126254721Semaste 127254721Semaste virtual bool 128254721Semaste GetObjectDescription (Stream &str, ValueObject &object); 129254721Semaste 130254721Semaste virtual bool 131254721Semaste GetObjectDescription (Stream &str, Value &value, ExecutionContextScope *exe_scope); 132254721Semaste 133254721Semaste static bool 134254721Semaste IsCPPMangledName(const char *name); 135254721Semaste 136254721Semaste static bool 137254721Semaste StripNamespacesFromVariableName (const char *name, const char *&base_name_start, const char *&base_name_end); 138254721Semaste 139254721Semaste // in some cases, compilers will output different names for one same type. when tht happens, it might be impossible 140254721Semaste // to construct SBType objects for a valid type, because the name that is available is not the same as the name that 141254721Semaste // can be used as a search key in FindTypes(). the equivalents map here is meant to return possible alternative names 142254721Semaste // for a type through which a search can be conducted. Currently, this is only enabled for C++ but can be extended 143254721Semaste // to ObjC or other languages if necessary 144254721Semaste static uint32_t 145254721Semaste FindEquivalentNames(ConstString type_name, std::vector<ConstString>& equivalents); 146254721Semaste 147254721Semasteprotected: 148254721Semaste //------------------------------------------------------------------ 149254721Semaste // Classes that inherit from CPPLanguageRuntime can see and modify these 150254721Semaste //------------------------------------------------------------------ 151254721Semaste CPPLanguageRuntime(Process *process); 152254721Semasteprivate: 153254721Semaste DISALLOW_COPY_AND_ASSIGN (CPPLanguageRuntime); 154254721Semaste}; 155254721Semaste 156254721Semaste} // namespace lldb_private 157254721Semaste 158254721Semaste#endif // liblldb_CPPLanguageRuntime_h_ 159