blob: 697dc7eec493f7b920624b7e4052ff302dd5b62e [file] [log] [blame]
Sean Callanan3b107b12011-12-03 03:15:28 +00001//===-- 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"
Greg Claytond0029442013-03-27 01:48:02 +000011#include "lldb/Core/Stream.h"
Sean Callanan3b107b12011-12-03 03:15:28 +000012
13using namespace lldb_private;
14
15#define ClangExternalASTSourceCommon_MAGIC (0x00112233aabbccddull)
16
Sean Callanan60217122012-04-13 00:10:03 +000017uint64_t g_TotalSizeOfMetadata = 0;
18
Sean Callanan3b107b12011-12-03 03:15:28 +000019ClangExternalASTSourceCommon::ClangExternalASTSourceCommon() : clang::ExternalASTSource()
20{
21 m_magic = ClangExternalASTSourceCommon_MAGIC;
Sean Callanan60217122012-04-13 00:10:03 +000022
23 g_TotalSizeOfMetadata += m_metadata.size();
24}
25
26ClangExternalASTSourceCommon::~ClangExternalASTSourceCommon()
27{
28 g_TotalSizeOfMetadata -= m_metadata.size();
Sean Callanan3b107b12011-12-03 03:15:28 +000029}
30
Jim Ingham379397632012-10-27 02:54:13 +000031ClangASTMetadata *
Greg Claytond0029442013-03-27 01:48:02 +000032ClangExternalASTSourceCommon::GetMetadata (const void *object)
Sean Callanan3b107b12011-12-03 03:15:28 +000033{
34 assert (m_magic == ClangExternalASTSourceCommon_MAGIC);
35
Jim Ingham379397632012-10-27 02:54:13 +000036 if (HasMetadata (object))
37 return &m_metadata[object];
38 else
39 return NULL;
Sean Callanan3b107b12011-12-03 03:15:28 +000040}
41
Jim Ingham379397632012-10-27 02:54:13 +000042void
Greg Claytond0029442013-03-27 01:48:02 +000043ClangExternalASTSourceCommon::SetMetadata (const void *object, ClangASTMetadata &metadata)
Sean Callanan3b107b12011-12-03 03:15:28 +000044{
45 assert (m_magic == ClangExternalASTSourceCommon_MAGIC);
46
Sean Callanan60217122012-04-13 00:10:03 +000047 uint64_t orig_size = m_metadata.size();
Sean Callanan3b107b12011-12-03 03:15:28 +000048 m_metadata[object] = metadata;
Sean Callanan60217122012-04-13 00:10:03 +000049 uint64_t new_size = m_metadata.size();
50 g_TotalSizeOfMetadata += (new_size - orig_size);
Sean Callanan3b107b12011-12-03 03:15:28 +000051}
52
Jim Ingham379397632012-10-27 02:54:13 +000053bool
Greg Claytond0029442013-03-27 01:48:02 +000054ClangExternalASTSourceCommon::HasMetadata (const void *object)
Sean Callanan3b107b12011-12-03 03:15:28 +000055{
56 assert (m_magic == ClangExternalASTSourceCommon_MAGIC);
57
58 return m_metadata.find(object) != m_metadata.end();
Greg Clayton1075aca2011-12-03 20:02:42 +000059}
Greg Claytond0029442013-03-27 01:48:02 +000060
61void
62ClangASTMetadata::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