1153577Sjhb//===-- ClangExternalASTSourceCommon.cpp ------------------------*- C++ -*-===// 2153577Sjhb// 3153577Sjhb// The LLVM Compiler Infrastructure 4153577Sjhb// 5153577Sjhb// This file is distributed under the University of Illinois Open Source 6153577Sjhb// License. See LICENSE.TXT for details. 7153577Sjhb// 8153577Sjhb//===----------------------------------------------------------------------===// 9153577Sjhb 10153577Sjhb#include "lldb/Symbol/ClangExternalASTSourceCommon.h" 11153577Sjhb#include "lldb/Core/Stream.h" 12153577Sjhb 13153577Sjhbusing namespace lldb_private; 14153577Sjhb 15153577Sjhb#define ClangExternalASTSourceCommon_MAGIC (0x00112233aabbccddull) 16153577Sjhb 17153577Sjhbuint64_t g_TotalSizeOfMetadata = 0; 18153577Sjhb 19153577SjhbClangExternalASTSourceCommon::ClangExternalASTSourceCommon() : clang::ExternalASTSource() 20153577Sjhb{ 21153577Sjhb m_magic = ClangExternalASTSourceCommon_MAGIC; 22153577Sjhb 23153577Sjhb g_TotalSizeOfMetadata += m_metadata.size(); 24153577Sjhb} 25153577Sjhb 26153577SjhbClangExternalASTSourceCommon::~ClangExternalASTSourceCommon() 27153577Sjhb{ 28153577Sjhb g_TotalSizeOfMetadata -= m_metadata.size(); 29153577Sjhb} 30153577Sjhb 31153577SjhbClangASTMetadata * 32153577SjhbClangExternalASTSourceCommon::GetMetadata (const void *object) 33153577Sjhb{ 34153577Sjhb assert (m_magic == ClangExternalASTSourceCommon_MAGIC); 35153577Sjhb 36153577Sjhb if (HasMetadata (object)) 37153577Sjhb return &m_metadata[object]; 38153577Sjhb else 39153577Sjhb return NULL; 40153577Sjhb} 41153577Sjhb 42189373Sjhbvoid 43198251SjkimClangExternalASTSourceCommon::SetMetadata (const void *object, ClangASTMetadata &metadata) 44189373Sjhb{ 45153577Sjhb assert (m_magic == ClangExternalASTSourceCommon_MAGIC); 46268351Smarcel 47254882Sdumbbell uint64_t orig_size = m_metadata.size(); 48254882Sdumbbell m_metadata[object] = metadata; 49254882Sdumbbell uint64_t new_size = m_metadata.size(); 50254882Sdumbbell g_TotalSizeOfMetadata += (new_size - orig_size); 51153577Sjhb} 52153577Sjhb 53153577Sjhbbool 54189373SjhbClangExternalASTSourceCommon::HasMetadata (const void *object) 55189373Sjhb{ 56189373Sjhb assert (m_magic == ClangExternalASTSourceCommon_MAGIC); 57189373Sjhb 58189373Sjhb return m_metadata.find(object) != m_metadata.end(); 59183095Sjhb} 60183095Sjhb 61249315Sjhbvoid 62249315SjhbClangASTMetadata::Dump (Stream *s) 63183095Sjhb{ 64183095Sjhb lldb::user_id_t uid = GetUserID (); 65198251Sjkim 66198251Sjkim if (uid != LLDB_INVALID_UID) 67255571Sdumbbell { 68255571Sdumbbell s->Printf ("uid=0x%" PRIx64, uid); 69255571Sdumbbell } 70255571Sdumbbell 71255571Sdumbbell uint64_t isa_ptr = GetISAPtr (); 72255571Sdumbbell if (isa_ptr != 0) 73198251Sjkim { 74198964Sjkim s->Printf ("isa_ptr=0x%" PRIx64, isa_ptr); 75198251Sjkim } 76198251Sjkim 77254882Sdumbbell const char *obj_ptr_name = GetObjectPtrName(); 78254882Sdumbbell if (obj_ptr_name) 79254882Sdumbbell { 80259679Sdumbbell s->Printf ("obj_ptr_name=\"%s\" ", obj_ptr_name); 81259679Sdumbbell } 82259679Sdumbbell 83254882Sdumbbell if (m_is_dynamic_cxx) 84259679Sdumbbell { 85259679Sdumbbell s->Printf ("is_dynamic_cxx=%i ", m_is_dynamic_cxx); 86259679Sdumbbell } 87259679Sdumbbell s->EOL(); 88259679Sdumbbell} 89259679Sdumbbell 90259679Sdumbbell