130fdc8d8SChris Lattner //===-- SBCompileUnit.cpp ---------------------------------------*- C++ -*-===// 230fdc8d8SChris Lattner // 330fdc8d8SChris Lattner // The LLVM Compiler Infrastructure 430fdc8d8SChris Lattner // 530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source 630fdc8d8SChris Lattner // License. See LICENSE.TXT for details. 730fdc8d8SChris Lattner // 830fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 930fdc8d8SChris Lattner 1030fdc8d8SChris Lattner #include "lldb/API/SBCompileUnit.h" 1130fdc8d8SChris Lattner #include "lldb/API/SBLineEntry.h" 12dde9cff3SCaroline Tice #include "lldb/API/SBStream.h" 1330fdc8d8SChris Lattner #include "lldb/Symbol/CompileUnit.h" 1430fdc8d8SChris Lattner #include "lldb/Symbol/LineEntry.h" 1530fdc8d8SChris Lattner #include "lldb/Symbol/LineTable.h" 16ceb6b139SCaroline Tice #include "lldb/Core/Log.h" 1730fdc8d8SChris Lattner 1830fdc8d8SChris Lattner using namespace lldb; 1930fdc8d8SChris Lattner using namespace lldb_private; 2030fdc8d8SChris Lattner 2130fdc8d8SChris Lattner 2230fdc8d8SChris Lattner SBCompileUnit::SBCompileUnit () : 236611103cSGreg Clayton m_opaque_ptr (NULL) 2430fdc8d8SChris Lattner { 2530fdc8d8SChris Lattner } 2630fdc8d8SChris Lattner 2730fdc8d8SChris Lattner SBCompileUnit::SBCompileUnit (lldb_private::CompileUnit *lldb_object_ptr) : 286611103cSGreg Clayton m_opaque_ptr (lldb_object_ptr) 2930fdc8d8SChris Lattner { 3030fdc8d8SChris Lattner } 3130fdc8d8SChris Lattner 32efabb123SGreg Clayton SBCompileUnit::SBCompileUnit(const SBCompileUnit &rhs) : 33efabb123SGreg Clayton m_opaque_ptr (rhs.m_opaque_ptr) 34efabb123SGreg Clayton { 35efabb123SGreg Clayton } 36efabb123SGreg Clayton 37efabb123SGreg Clayton const SBCompileUnit & 38efabb123SGreg Clayton SBCompileUnit::operator = (const SBCompileUnit &rhs) 39efabb123SGreg Clayton { 40efabb123SGreg Clayton m_opaque_ptr = rhs.m_opaque_ptr; 41efabb123SGreg Clayton return *this; 42efabb123SGreg Clayton } 43efabb123SGreg Clayton 44efabb123SGreg Clayton 4530fdc8d8SChris Lattner SBCompileUnit::~SBCompileUnit () 4630fdc8d8SChris Lattner { 476611103cSGreg Clayton m_opaque_ptr = NULL; 4830fdc8d8SChris Lattner } 4930fdc8d8SChris Lattner 5030fdc8d8SChris Lattner SBFileSpec 5130fdc8d8SChris Lattner SBCompileUnit::GetFileSpec () const 5230fdc8d8SChris Lattner { 5330fdc8d8SChris Lattner SBFileSpec file_spec; 546611103cSGreg Clayton if (m_opaque_ptr) 556611103cSGreg Clayton file_spec.SetFileSpec(*m_opaque_ptr); 5630fdc8d8SChris Lattner return file_spec; 5730fdc8d8SChris Lattner } 5830fdc8d8SChris Lattner 5930fdc8d8SChris Lattner uint32_t 6030fdc8d8SChris Lattner SBCompileUnit::GetNumLineEntries () const 6130fdc8d8SChris Lattner { 626611103cSGreg Clayton if (m_opaque_ptr) 6330fdc8d8SChris Lattner { 646611103cSGreg Clayton LineTable *line_table = m_opaque_ptr->GetLineTable (); 6530fdc8d8SChris Lattner if (line_table) 6630fdc8d8SChris Lattner return line_table->GetSize(); 6730fdc8d8SChris Lattner } 6830fdc8d8SChris Lattner return 0; 6930fdc8d8SChris Lattner } 7030fdc8d8SChris Lattner 7130fdc8d8SChris Lattner SBLineEntry 7230fdc8d8SChris Lattner SBCompileUnit::GetLineEntryAtIndex (uint32_t idx) const 7330fdc8d8SChris Lattner { 74*2d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 75ceb6b139SCaroline Tice 7630fdc8d8SChris Lattner SBLineEntry sb_line_entry; 776611103cSGreg Clayton if (m_opaque_ptr) 7830fdc8d8SChris Lattner { 796611103cSGreg Clayton LineTable *line_table = m_opaque_ptr->GetLineTable (); 8030fdc8d8SChris Lattner if (line_table) 8130fdc8d8SChris Lattner { 8230fdc8d8SChris Lattner LineEntry line_entry; 8330fdc8d8SChris Lattner if (line_table->GetLineEntryAtIndex(idx, line_entry)) 8430fdc8d8SChris Lattner sb_line_entry.SetLineEntry(line_entry); 8530fdc8d8SChris Lattner } 8630fdc8d8SChris Lattner } 87ceb6b139SCaroline Tice 88ceb6b139SCaroline Tice if (log) 89ceb6b139SCaroline Tice { 90ceb6b139SCaroline Tice SBStream sstr; 91ceb6b139SCaroline Tice sb_line_entry.GetDescription (sstr); 92cfd1acedSGreg Clayton log->Printf ("SBCompileUnit(%p)::GetLineEntryAtIndex (idx=%u) => SBLineEntry(%p): '%s'", 93cfd1acedSGreg Clayton m_opaque_ptr, idx, sb_line_entry.get(), sstr.GetData()); 94ceb6b139SCaroline Tice } 95ceb6b139SCaroline Tice 9630fdc8d8SChris Lattner return sb_line_entry; 9730fdc8d8SChris Lattner } 9830fdc8d8SChris Lattner 9930fdc8d8SChris Lattner uint32_t 10030fdc8d8SChris Lattner SBCompileUnit::FindLineEntryIndex (uint32_t start_idx, uint32_t line, SBFileSpec *inline_file_spec) const 10130fdc8d8SChris Lattner { 102*2d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 103ceb6b139SCaroline Tice 104cfd1acedSGreg Clayton uint32_t index = UINT32_MAX; 1056611103cSGreg Clayton if (m_opaque_ptr) 10630fdc8d8SChris Lattner { 10730fdc8d8SChris Lattner FileSpec file_spec; 10830fdc8d8SChris Lattner if (inline_file_spec && inline_file_spec->IsValid()) 10930fdc8d8SChris Lattner file_spec = inline_file_spec->ref(); 11030fdc8d8SChris Lattner else 1116611103cSGreg Clayton file_spec = *m_opaque_ptr; 11230fdc8d8SChris Lattner 113ceb6b139SCaroline Tice 114cfd1acedSGreg Clayton index = m_opaque_ptr->FindLineEntry (start_idx, 11530fdc8d8SChris Lattner line, 11630fdc8d8SChris Lattner inline_file_spec ? inline_file_spec->get() : NULL, 11730fdc8d8SChris Lattner NULL); 11830fdc8d8SChris Lattner } 119ceb6b139SCaroline Tice 120ceb6b139SCaroline Tice if (log) 121750cd175SCaroline Tice { 122750cd175SCaroline Tice SBStream sstr; 123cfd1acedSGreg Clayton if (index == UINT32_MAX) 124cfd1acedSGreg Clayton { 125cfd1acedSGreg Clayton log->Printf ("SBCompileUnit(%p)::FindLineEntryIndex (start_idx=%u, line=%u, SBFileSpec(%p)) => NOT FOUND", 126cfd1acedSGreg Clayton m_opaque_ptr, start_idx, line, inline_file_spec ? inline_file_spec->get() : NULL); 127cfd1acedSGreg Clayton } 128cfd1acedSGreg Clayton else 129cfd1acedSGreg Clayton { 130cfd1acedSGreg Clayton log->Printf ("SBCompileUnit(%p)::FindLineEntryIndex (start_idx=%u, line=%u, SBFileSpec(%p)) => %u", 131cfd1acedSGreg Clayton m_opaque_ptr, start_idx, line, inline_file_spec ? inline_file_spec->get() : NULL, index); 132cfd1acedSGreg Clayton } 133750cd175SCaroline Tice } 134ceb6b139SCaroline Tice 135cfd1acedSGreg Clayton return index; 13630fdc8d8SChris Lattner } 13730fdc8d8SChris Lattner 13830fdc8d8SChris Lattner bool 13930fdc8d8SChris Lattner SBCompileUnit::IsValid () const 14030fdc8d8SChris Lattner { 1416611103cSGreg Clayton return m_opaque_ptr != NULL; 14230fdc8d8SChris Lattner } 14330fdc8d8SChris Lattner 14430fdc8d8SChris Lattner bool 14530fdc8d8SChris Lattner SBCompileUnit::operator == (const SBCompileUnit &rhs) const 14630fdc8d8SChris Lattner { 1476611103cSGreg Clayton return m_opaque_ptr == rhs.m_opaque_ptr; 14830fdc8d8SChris Lattner } 14930fdc8d8SChris Lattner 15030fdc8d8SChris Lattner bool 15130fdc8d8SChris Lattner SBCompileUnit::operator != (const SBCompileUnit &rhs) const 15230fdc8d8SChris Lattner { 1536611103cSGreg Clayton return m_opaque_ptr != rhs.m_opaque_ptr; 15430fdc8d8SChris Lattner } 15530fdc8d8SChris Lattner 15630fdc8d8SChris Lattner const lldb_private::CompileUnit * 15730fdc8d8SChris Lattner SBCompileUnit::operator->() const 15830fdc8d8SChris Lattner { 1596611103cSGreg Clayton return m_opaque_ptr; 16030fdc8d8SChris Lattner } 16130fdc8d8SChris Lattner 16230fdc8d8SChris Lattner const lldb_private::CompileUnit & 16330fdc8d8SChris Lattner SBCompileUnit::operator*() const 16430fdc8d8SChris Lattner { 1656611103cSGreg Clayton return *m_opaque_ptr; 16630fdc8d8SChris Lattner } 167dde9cff3SCaroline Tice 168750cd175SCaroline Tice const lldb_private::CompileUnit * 169750cd175SCaroline Tice SBCompileUnit::get () const 170750cd175SCaroline Tice { 171750cd175SCaroline Tice return m_opaque_ptr; 172750cd175SCaroline Tice } 173750cd175SCaroline Tice 174dde9cff3SCaroline Tice bool 175dde9cff3SCaroline Tice SBCompileUnit::GetDescription (SBStream &description) 176dde9cff3SCaroline Tice { 177dde9cff3SCaroline Tice if (m_opaque_ptr) 178dde9cff3SCaroline Tice { 179dac97f31SCaroline Tice description.ref(); 180dde9cff3SCaroline Tice m_opaque_ptr->Dump (description.get(), false); 181dde9cff3SCaroline Tice } 182dde9cff3SCaroline Tice else 183dde9cff3SCaroline Tice description.Printf ("No Value"); 184dde9cff3SCaroline Tice 185dde9cff3SCaroline Tice return true; 186dde9cff3SCaroline Tice } 187