Adding support for fetching the Dynamic Value for ObjC Objects.
git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@130701 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Target/ObjCLanguageRuntime.cpp b/source/Target/ObjCLanguageRuntime.cpp
index bc6e8a0..1d57556 100644
--- a/source/Target/ObjCLanguageRuntime.cpp
+++ b/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 @@
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 ();
+}