1 //===-- CPPLanguageRuntime.h ---------------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef liblldb_CPPLanguageRuntime_h_ 11 #define liblldb_CPPLanguageRuntime_h_ 12 13 // C Includes 14 // C++ Includes 15 #include <vector> 16 // Other libraries and framework includes 17 // Project includes 18 #include "lldb/Core/PluginInterface.h" 19 #include "lldb/lldb-private.h" 20 #include "lldb/Target/LanguageRuntime.h" 21 22 namespace lldb_private { 23 24 class CPPLanguageRuntime : 25 public LanguageRuntime 26 { 27 public: 28 29 class MethodName 30 { 31 public: 32 enum Type 33 { 34 eTypeInvalid, 35 eTypeUnknownMethod, 36 eTypeClassMethod, 37 eTypeInstanceMethod 38 }; 39 MethodName()40 MethodName () : 41 m_full(), 42 m_basename(), 43 m_context(), 44 m_arguments(), 45 m_qualifiers(), 46 m_type (eTypeInvalid), 47 m_parsed (false), 48 m_parse_error (false) 49 { 50 } 51 MethodName(const ConstString & s)52 MethodName (const ConstString &s) : 53 m_full(s), 54 m_basename(), 55 m_context(), 56 m_arguments(), 57 m_qualifiers(), 58 m_type (eTypeInvalid), 59 m_parsed (false), 60 m_parse_error (false) 61 { 62 } 63 64 void 65 Clear(); 66 67 bool IsValid()68 IsValid () const 69 { 70 if (m_parse_error) 71 return false; 72 if (m_type == eTypeInvalid) 73 return false; 74 return (bool)m_full; 75 } 76 77 Type GetType()78 GetType () const 79 { 80 return m_type; 81 } 82 83 const ConstString & GetFullName()84 GetFullName () const 85 { 86 return m_full; 87 } 88 89 llvm::StringRef 90 GetBasename (); 91 92 llvm::StringRef 93 GetContext (); 94 95 llvm::StringRef 96 GetArguments (); 97 98 llvm::StringRef 99 GetQualifiers (); 100 101 protected: 102 void 103 Parse(); 104 105 ConstString m_full; // Full name: "lldb::SBTarget::GetBreakpointAtIndex(unsigned int) const" 106 llvm::StringRef m_basename; // Basename: "GetBreakpointAtIndex" 107 llvm::StringRef m_context; // Decl context: "lldb::SBTarget" 108 llvm::StringRef m_arguments; // Arguments: "(unsigned int)" 109 llvm::StringRef m_qualifiers; // Qualifiers: "const" 110 Type m_type; 111 bool m_parsed; 112 bool m_parse_error; 113 }; 114 115 virtual 116 ~CPPLanguageRuntime(); 117 118 virtual lldb::LanguageType GetLanguageType()119 GetLanguageType () const 120 { 121 return lldb::eLanguageTypeC_plus_plus; 122 } 123 124 virtual bool 125 IsVTableName (const char *name) = 0; 126 127 virtual bool 128 GetObjectDescription (Stream &str, ValueObject &object); 129 130 virtual bool 131 GetObjectDescription (Stream &str, Value &value, ExecutionContextScope *exe_scope); 132 133 static bool 134 IsCPPMangledName(const char *name); 135 136 static bool 137 StripNamespacesFromVariableName (const char *name, const char *&base_name_start, const char *&base_name_end); 138 139 // in some cases, compilers will output different names for one same type. when tht happens, it might be impossible 140 // to construct SBType objects for a valid type, because the name that is available is not the same as the name that 141 // can be used as a search key in FindTypes(). the equivalents map here is meant to return possible alternative names 142 // for a type through which a search can be conducted. Currently, this is only enabled for C++ but can be extended 143 // to ObjC or other languages if necessary 144 static uint32_t 145 FindEquivalentNames(ConstString type_name, std::vector<ConstString>& equivalents); 146 147 protected: 148 //------------------------------------------------------------------ 149 // Classes that inherit from CPPLanguageRuntime can see and modify these 150 //------------------------------------------------------------------ 151 CPPLanguageRuntime(Process *process); 152 private: 153 DISALLOW_COPY_AND_ASSIGN (CPPLanguageRuntime); 154 }; 155 156 } // namespace lldb_private 157 158 #endif // liblldb_CPPLanguageRuntime_h_ 159