diff options
Diffstat (limited to 'contrib/llvm/tools/lldb/source/Symbol/ClangExternalASTSourceCommon.cpp')
-rw-r--r-- | contrib/llvm/tools/lldb/source/Symbol/ClangExternalASTSourceCommon.cpp | 89 |
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(); +} + |