summaryrefslogtreecommitdiffstats
path: root/contrib/llvm/tools/lldb/source/Symbol/ClangExternalASTSourceCommon.cpp
diff options
context:
space:
mode:
authoremaste <emaste@FreeBSD.org>2013-08-23 18:06:42 +0000
committeremaste <emaste@FreeBSD.org>2013-08-23 18:06:42 +0000
commit424d4dadd208e2a1e9a43c3d55f47f03ba0c4509 (patch)
tree05d762b98a499804ce690e6ce04033f1ddf4dee6 /contrib/llvm/tools/lldb/source/Symbol/ClangExternalASTSourceCommon.cpp
parentcde487f27a84e02a560384f75178fddca68740f6 (diff)
parentdcd15f81789e389c1cb27d264fcdddfd0a6002bd (diff)
downloadFreeBSD-src-424d4dadd208e2a1e9a43c3d55f47f03ba0c4509.zip
FreeBSD-src-424d4dadd208e2a1e9a43c3d55f47f03ba0c4509.tar.gz
Merge lldb r188801 to contrib/llvm/tools/lldb/
Diffstat (limited to 'contrib/llvm/tools/lldb/source/Symbol/ClangExternalASTSourceCommon.cpp')
-rw-r--r--contrib/llvm/tools/lldb/source/Symbol/ClangExternalASTSourceCommon.cpp89
1 files changed, 89 insertions, 0 deletions
diff --git a/contrib/llvm/tools/lldb/source/Symbol/ClangExternalASTSourceCommon.cpp b/contrib/llvm/tools/lldb/source/Symbol/ClangExternalASTSourceCommon.cpp
new file mode 100644
index 0000000..697dc7e
--- /dev/null
+++ b/contrib/llvm/tools/lldb/source/Symbol/ClangExternalASTSourceCommon.cpp
@@ -0,0 +1,89 @@
+//===-- ClangExternalASTSourceCommon.cpp ------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/Symbol/ClangExternalASTSourceCommon.h"
+#include "lldb/Core/Stream.h"
+
+using namespace lldb_private;
+
+#define ClangExternalASTSourceCommon_MAGIC (0x00112233aabbccddull)
+
+uint64_t g_TotalSizeOfMetadata = 0;
+
+ClangExternalASTSourceCommon::ClangExternalASTSourceCommon() : clang::ExternalASTSource()
+{
+ m_magic = ClangExternalASTSourceCommon_MAGIC;
+
+ g_TotalSizeOfMetadata += m_metadata.size();
+}
+
+ClangExternalASTSourceCommon::~ClangExternalASTSourceCommon()
+{
+ g_TotalSizeOfMetadata -= m_metadata.size();
+}
+
+ClangASTMetadata *
+ClangExternalASTSourceCommon::GetMetadata (const void *object)
+{
+ assert (m_magic == ClangExternalASTSourceCommon_MAGIC);
+
+ if (HasMetadata (object))
+ return &m_metadata[object];
+ else
+ return NULL;
+}
+
+void
+ClangExternalASTSourceCommon::SetMetadata (const void *object, ClangASTMetadata &metadata)
+{
+ assert (m_magic == ClangExternalASTSourceCommon_MAGIC);
+
+ uint64_t orig_size = m_metadata.size();
+ m_metadata[object] = metadata;
+ uint64_t new_size = m_metadata.size();
+ g_TotalSizeOfMetadata += (new_size - orig_size);
+}
+
+bool
+ClangExternalASTSourceCommon::HasMetadata (const void *object)
+{
+ assert (m_magic == ClangExternalASTSourceCommon_MAGIC);
+
+ return m_metadata.find(object) != m_metadata.end();
+}
+
+void
+ClangASTMetadata::Dump (Stream *s)
+{
+ lldb::user_id_t uid = GetUserID ();
+
+ if (uid != LLDB_INVALID_UID)
+ {
+ s->Printf ("uid=0x%" PRIx64, uid);
+ }
+
+ uint64_t isa_ptr = GetISAPtr ();
+ if (isa_ptr != 0)
+ {
+ s->Printf ("isa_ptr=0x%" PRIx64, isa_ptr);
+ }
+
+ const char *obj_ptr_name = GetObjectPtrName();
+ if (obj_ptr_name)
+ {
+ s->Printf ("obj_ptr_name=\"%s\" ", obj_ptr_name);
+ }
+
+ if (m_is_dynamic_cxx)
+ {
+ s->Printf ("is_dynamic_cxx=%i ", m_is_dynamic_cxx);
+ }
+ s->EOL();
+}
+
OpenPOWER on IntegriCloud