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