1fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com//===-- ClangExternalASTSourceCommon.cpp ------------------------*- C++ -*-===// 2fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com// 3fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com// The LLVM Compiler Infrastructure 4fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com// 5fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com// This file is distributed under the University of Illinois Open Source 6fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com// License. See LICENSE.TXT for details. 7b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com// 8fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com//===----------------------------------------------------------------------===// 9fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 10fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com#include "lldb/Symbol/ClangExternalASTSourceCommon.h" 11fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com#include "lldb/Core/Stream.h" 1215fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.com 1315fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.comusing namespace lldb_private; 1415fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.com 15b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com#define ClangExternalASTSourceCommon_MAGIC (0x00112233aabbccddull) 16b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 1715fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.comuint64_t g_TotalSizeOfMetadata = 0; 1815fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.com 1915fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.comClangExternalASTSourceCommon::ClangExternalASTSourceCommon() : clang::ExternalASTSource() 2015fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.com{ 21fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com m_magic = ClangExternalASTSourceCommon_MAGIC; 22fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 23fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com g_TotalSizeOfMetadata += m_metadata.size(); 24fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com} 25fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 26fa0588ff672564af1c235a63589573829035a60bcaryclark@google.comClangExternalASTSourceCommon::~ClangExternalASTSourceCommon() 27fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com{ 288dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com g_TotalSizeOfMetadata -= m_metadata.size(); 29fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com} 3065f9f0a1664a9cb38157ccfbcc3e0e936af0a58ecaryclark@google.com 31027de226c144d9e6b7a76acb2e904952b5620a5ecaryclark@google.comClangASTMetadata * 328dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.comClangExternalASTSourceCommon::GetMetadata (const void *object) 3365f9f0a1664a9cb38157ccfbcc3e0e936af0a58ecaryclark@google.com{ 348dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com assert (m_magic == ClangExternalASTSourceCommon_MAGIC); 35fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 36fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com if (HasMetadata (object)) 37fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com return &m_metadata[object]; 38fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com else 39fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com return NULL; 4065f9f0a1664a9cb38157ccfbcc3e0e936af0a58ecaryclark@google.com} 41fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 428dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.comvoid 43fa0588ff672564af1c235a63589573829035a60bcaryclark@google.comClangExternalASTSourceCommon::SetMetadata (const void *object, ClangASTMetadata &metadata) 4465f9f0a1664a9cb38157ccfbcc3e0e936af0a58ecaryclark@google.com{ 45027de226c144d9e6b7a76acb2e904952b5620a5ecaryclark@google.com assert (m_magic == ClangExternalASTSourceCommon_MAGIC); 46fa4a6e964691ff9a88bc047418abe2d4324dfcaecaryclark@google.com 4765f9f0a1664a9cb38157ccfbcc3e0e936af0a58ecaryclark@google.com uint64_t orig_size = m_metadata.size(); 48fa4a6e964691ff9a88bc047418abe2d4324dfcaecaryclark@google.com m_metadata[object] = metadata; 49fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com uint64_t new_size = m_metadata.size(); 50fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com g_TotalSizeOfMetadata += (new_size - orig_size); 51fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com} 52027de226c144d9e6b7a76acb2e904952b5620a5ecaryclark@google.com 53027de226c144d9e6b7a76acb2e904952b5620a5ecaryclark@google.combool 54027de226c144d9e6b7a76acb2e904952b5620a5ecaryclark@google.comClangExternalASTSourceCommon::HasMetadata (const void *object) 55027de226c144d9e6b7a76acb2e904952b5620a5ecaryclark@google.com{ 56027de226c144d9e6b7a76acb2e904952b5620a5ecaryclark@google.com assert (m_magic == ClangExternalASTSourceCommon_MAGIC); 57fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 58fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com return m_metadata.find(object) != m_metadata.end(); 5965f9f0a1664a9cb38157ccfbcc3e0e936af0a58ecaryclark@google.com} 60fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 61fa0588ff672564af1c235a63589573829035a60bcaryclark@google.comvoid 62fa0588ff672564af1c235a63589573829035a60bcaryclark@google.comClangASTMetadata::Dump (Stream *s) 63fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com{ 648dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com lldb::user_id_t uid = GetUserID (); 658dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com 668dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com if (uid != LLDB_INVALID_UID) 678dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com { 68fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com s->Printf ("uid=0x%" PRIx64, uid); 69fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com } 70fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 71fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com uint64_t isa_ptr = GetISAPtr (); 72fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com if (isa_ptr != 0) 73fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com { 74fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com s->Printf ("isa_ptr=0x%" PRIx64, isa_ptr); 75fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com } 76fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 77fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com const char *obj_ptr_name = GetObjectPtrName(); 78fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com if (obj_ptr_name) 79fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com { 80fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com s->Printf ("obj_ptr_name=\"%s\" ", obj_ptr_name); 81fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com } 82fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 83fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com if (m_is_dynamic_cxx) 84fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com { 85fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com s->Printf ("is_dynamic_cxx=%i ", m_is_dynamic_cxx); 86fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com } 87fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com s->EOL(); 88fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com} 89fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 90fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com