diff options
Diffstat (limited to 'lldb/source/Target/ObjCLanguageRuntime.cpp')
-rw-r--r-- | lldb/source/Target/ObjCLanguageRuntime.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/lldb/source/Target/ObjCLanguageRuntime.cpp b/lldb/source/Target/ObjCLanguageRuntime.cpp index bc6e8a0629b..1d575569183 100644 --- a/lldb/source/Target/ObjCLanguageRuntime.cpp +++ b/lldb/source/Target/ObjCLanguageRuntime.cpp @@ -12,6 +12,7 @@ #include "lldb/Core/PluginManager.h" #include "lldb/Core/ValueObject.h" #include "lldb/Symbol/ClangASTContext.h" +#include "lldb/Symbol/Type.h" #include "lldb/Target/ObjCLanguageRuntime.h" using namespace lldb; @@ -50,3 +51,45 @@ ObjCLanguageRuntime::LookupInMethodCache (lldb::addr_t class_addr, lldb::addr_t return (*pos).second; return LLDB_INVALID_ADDRESS; } + +void +ObjCLanguageRuntime::AddToClassNameCache (lldb::addr_t class_addr, const char *name, lldb::TypeSP type_sp) +{ + LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP)); + if (log) + { + log->Printf ("Caching: class 0x%llx name: %s.", class_addr, name); + } + + TypeAndOrName class_type_or_name; + + if (type_sp != NULL) + class_type_or_name.SetTypeSP (type_sp); + else if (name && *name != '\0') + class_type_or_name.SetName (name); + else + return; + m_class_name_cache.insert (std::pair<lldb::addr_t,TypeAndOrName> (class_addr, class_type_or_name)); +} + +void +ObjCLanguageRuntime::AddToClassNameCache (lldb::addr_t class_addr, const TypeAndOrName &class_type_or_name) +{ + LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP)); + if (log) + { + log->Printf ("Caching: class 0x%llx name: %s.", class_addr, class_type_or_name.GetName().AsCString()); + } + + m_class_name_cache.insert (std::pair<lldb::addr_t,TypeAndOrName> (class_addr, class_type_or_name)); +} + +TypeAndOrName +ObjCLanguageRuntime::LookupInClassNameCache (lldb::addr_t class_addr) +{ + ClassNameMap::iterator pos, end = m_class_name_cache.end(); + pos = m_class_name_cache.find (class_addr); + if (pos != end) + return (*pos).second; + return TypeAndOrName (); +} |