From 205afe679855a4ce8149cdaa94d3f0868ce796dc Mon Sep 17 00:00:00 2001 From: Ed Maste Date: Fri, 6 Feb 2015 21:38:51 +0000 Subject: Import LLDB as of upstream SVN r225923 (git 2b588ecd) This corresponds with the branchpoint for the 3.6 release. A number of files not required for the FreeBSD build have been removed. Sponsored by: DARPA, AFRL --- source/Symbol/ClangExternalASTSourceCommon.cpp | 38 +++++++++++++++++++------- 1 file changed, 28 insertions(+), 10 deletions(-) (limited to 'source/Symbol/ClangExternalASTSourceCommon.cpp') diff --git a/source/Symbol/ClangExternalASTSourceCommon.cpp b/source/Symbol/ClangExternalASTSourceCommon.cpp index 650d252a8fc37..79cc9a91355af 100644 --- a/source/Symbol/ClangExternalASTSourceCommon.cpp +++ b/source/Symbol/ClangExternalASTSourceCommon.cpp @@ -9,30 +9,52 @@ #include "lldb/Symbol/ClangExternalASTSourceCommon.h" #include "lldb/Core/Stream.h" +#include "lldb/Host/Mutex.h" using namespace lldb_private; -#define ClangExternalASTSourceCommon_MAGIC (0x00112233aabbccddull) - uint64_t g_TotalSizeOfMetadata = 0; -ClangExternalASTSourceCommon::ClangExternalASTSourceCommon() : clang::ExternalASTSource() +typedef llvm::DenseMap ASTSourceMap; + +static ASTSourceMap &GetSourceMap() +{ + static ASTSourceMap s_source_map; + return s_source_map; +} + +ClangExternalASTSourceCommon * +ClangExternalASTSourceCommon::Lookup(clang::ExternalASTSource *source) { - m_magic = ClangExternalASTSourceCommon_MAGIC; + ASTSourceMap &source_map = GetSourceMap(); + + ASTSourceMap::iterator iter = source_map.find(source); + if (iter != source_map.end()) + { + return iter->second; + } + else + { + return nullptr; + } +} + +ClangExternalASTSourceCommon::ClangExternalASTSourceCommon() : clang::ExternalASTSource() +{ g_TotalSizeOfMetadata += m_metadata.size(); + GetSourceMap()[this] = this; } ClangExternalASTSourceCommon::~ClangExternalASTSourceCommon() { + GetSourceMap().erase(this); g_TotalSizeOfMetadata -= m_metadata.size(); } ClangASTMetadata * ClangExternalASTSourceCommon::GetMetadata (const void *object) { - assert (m_magic == ClangExternalASTSourceCommon_MAGIC); - if (HasMetadata (object)) return &m_metadata[object]; else @@ -42,8 +64,6 @@ ClangExternalASTSourceCommon::GetMetadata (const void *object) 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(); @@ -53,8 +73,6 @@ ClangExternalASTSourceCommon::SetMetadata (const void *object, ClangASTMetadata bool ClangExternalASTSourceCommon::HasMetadata (const void *object) { - assert (m_magic == ClangExternalASTSourceCommon_MAGIC); - return m_metadata.find(object) != m_metadata.end(); } -- cgit v1.2.3