Home | History | Annotate | Download | only in Symbol
      1 //===-- ClangExternalASTSourceCommon.cpp ------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #include "lldb/Symbol/ClangExternalASTSourceCommon.h"
     11 #include "lldb/Core/Stream.h"
     12 
     13 using namespace lldb_private;
     14 
     15 #define ClangExternalASTSourceCommon_MAGIC  (0x00112233aabbccddull)
     16 
     17 uint64_t g_TotalSizeOfMetadata = 0;
     18 
     19 ClangExternalASTSourceCommon::ClangExternalASTSourceCommon() : clang::ExternalASTSource()
     20 {
     21     m_magic = ClangExternalASTSourceCommon_MAGIC;
     22 
     23     g_TotalSizeOfMetadata += m_metadata.size();
     24 }
     25 
     26 ClangExternalASTSourceCommon::~ClangExternalASTSourceCommon()
     27 {
     28     g_TotalSizeOfMetadata -= m_metadata.size();
     29 }
     30 
     31 ClangASTMetadata *
     32 ClangExternalASTSourceCommon::GetMetadata (const void *object)
     33 {
     34     assert (m_magic == ClangExternalASTSourceCommon_MAGIC);
     35 
     36     if (HasMetadata (object))
     37         return &m_metadata[object];
     38     else
     39         return NULL;
     40 }
     41 
     42 void
     43 ClangExternalASTSourceCommon::SetMetadata (const void *object, ClangASTMetadata &metadata)
     44 {
     45     assert (m_magic == ClangExternalASTSourceCommon_MAGIC);
     46 
     47     uint64_t orig_size = m_metadata.size();
     48     m_metadata[object] = metadata;
     49     uint64_t new_size = m_metadata.size();
     50     g_TotalSizeOfMetadata += (new_size - orig_size);
     51 }
     52 
     53 bool
     54 ClangExternalASTSourceCommon::HasMetadata (const void *object)
     55 {
     56     assert (m_magic == ClangExternalASTSourceCommon_MAGIC);
     57 
     58     return m_metadata.find(object) != m_metadata.end();
     59 }
     60 
     61 void
     62 ClangASTMetadata::Dump (Stream *s)
     63 {
     64     lldb::user_id_t uid = GetUserID ();
     65 
     66     if (uid != LLDB_INVALID_UID)
     67     {
     68         s->Printf ("uid=0x%" PRIx64, uid);
     69     }
     70 
     71     uint64_t isa_ptr = GetISAPtr ();
     72     if (isa_ptr != 0)
     73     {
     74         s->Printf ("isa_ptr=0x%" PRIx64, isa_ptr);
     75     }
     76 
     77     const char *obj_ptr_name = GetObjectPtrName();
     78     if (obj_ptr_name)
     79     {
     80         s->Printf ("obj_ptr_name=\"%s\" ", obj_ptr_name);
     81     }
     82 
     83     if (m_is_dynamic_cxx)
     84     {
     85         s->Printf ("is_dynamic_cxx=%i ", m_is_dynamic_cxx);
     86     }
     87     s->EOL();
     88 }
     89 
     90