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 3230fdc8d8SChris Lattner SBCompileUnit::~SBCompileUnit () 3330fdc8d8SChris Lattner { 346611103cSGreg Clayton m_opaque_ptr = NULL; 3530fdc8d8SChris Lattner } 3630fdc8d8SChris Lattner 3730fdc8d8SChris Lattner SBFileSpec 3830fdc8d8SChris Lattner SBCompileUnit::GetFileSpec () const 3930fdc8d8SChris Lattner { 4030fdc8d8SChris Lattner SBFileSpec file_spec; 416611103cSGreg Clayton if (m_opaque_ptr) 426611103cSGreg Clayton file_spec.SetFileSpec(*m_opaque_ptr); 4330fdc8d8SChris Lattner return file_spec; 4430fdc8d8SChris Lattner } 4530fdc8d8SChris Lattner 4630fdc8d8SChris Lattner uint32_t 4730fdc8d8SChris Lattner SBCompileUnit::GetNumLineEntries () const 4830fdc8d8SChris Lattner { 496611103cSGreg Clayton if (m_opaque_ptr) 5030fdc8d8SChris Lattner { 516611103cSGreg Clayton LineTable *line_table = m_opaque_ptr->GetLineTable (); 5230fdc8d8SChris Lattner if (line_table) 5330fdc8d8SChris Lattner return line_table->GetSize(); 5430fdc8d8SChris Lattner } 5530fdc8d8SChris Lattner return 0; 5630fdc8d8SChris Lattner } 5730fdc8d8SChris Lattner 5830fdc8d8SChris Lattner SBLineEntry 5930fdc8d8SChris Lattner SBCompileUnit::GetLineEntryAtIndex (uint32_t idx) const 6030fdc8d8SChris Lattner { 61ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 62ceb6b139SCaroline Tice 6330fdc8d8SChris Lattner SBLineEntry sb_line_entry; 646611103cSGreg Clayton if (m_opaque_ptr) 6530fdc8d8SChris Lattner { 666611103cSGreg Clayton LineTable *line_table = m_opaque_ptr->GetLineTable (); 6730fdc8d8SChris Lattner if (line_table) 6830fdc8d8SChris Lattner { 6930fdc8d8SChris Lattner LineEntry line_entry; 7030fdc8d8SChris Lattner if (line_table->GetLineEntryAtIndex(idx, line_entry)) 7130fdc8d8SChris Lattner sb_line_entry.SetLineEntry(line_entry); 7230fdc8d8SChris Lattner } 7330fdc8d8SChris Lattner } 74ceb6b139SCaroline Tice 75ceb6b139SCaroline Tice if (log) 76ceb6b139SCaroline Tice { 77ceb6b139SCaroline Tice SBStream sstr; 78ceb6b139SCaroline Tice sb_line_entry.GetDescription (sstr); 79*cfd1acedSGreg Clayton log->Printf ("SBCompileUnit(%p)::GetLineEntryAtIndex (idx=%u) => SBLineEntry(%p): '%s'", 80*cfd1acedSGreg Clayton m_opaque_ptr, idx, sb_line_entry.get(), sstr.GetData()); 81ceb6b139SCaroline Tice } 82ceb6b139SCaroline Tice 8330fdc8d8SChris Lattner return sb_line_entry; 8430fdc8d8SChris Lattner } 8530fdc8d8SChris Lattner 8630fdc8d8SChris Lattner uint32_t 8730fdc8d8SChris Lattner SBCompileUnit::FindLineEntryIndex (uint32_t start_idx, uint32_t line, SBFileSpec *inline_file_spec) const 8830fdc8d8SChris Lattner { 89ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 90ceb6b139SCaroline Tice 91*cfd1acedSGreg Clayton uint32_t index = UINT32_MAX; 926611103cSGreg Clayton if (m_opaque_ptr) 9330fdc8d8SChris Lattner { 9430fdc8d8SChris Lattner FileSpec file_spec; 9530fdc8d8SChris Lattner if (inline_file_spec && inline_file_spec->IsValid()) 9630fdc8d8SChris Lattner file_spec = inline_file_spec->ref(); 9730fdc8d8SChris Lattner else 986611103cSGreg Clayton file_spec = *m_opaque_ptr; 9930fdc8d8SChris Lattner 100ceb6b139SCaroline Tice 101*cfd1acedSGreg Clayton index = m_opaque_ptr->FindLineEntry (start_idx, 10230fdc8d8SChris Lattner line, 10330fdc8d8SChris Lattner inline_file_spec ? inline_file_spec->get() : NULL, 10430fdc8d8SChris Lattner NULL); 10530fdc8d8SChris Lattner } 106ceb6b139SCaroline Tice 107ceb6b139SCaroline Tice if (log) 108750cd175SCaroline Tice { 109750cd175SCaroline Tice SBStream sstr; 110*cfd1acedSGreg Clayton if (index == UINT32_MAX) 111*cfd1acedSGreg Clayton { 112*cfd1acedSGreg Clayton log->Printf ("SBCompileUnit(%p)::FindLineEntryIndex (start_idx=%u, line=%u, SBFileSpec(%p)) => NOT FOUND", 113*cfd1acedSGreg Clayton m_opaque_ptr, start_idx, line, inline_file_spec ? inline_file_spec->get() : NULL); 114*cfd1acedSGreg Clayton } 115*cfd1acedSGreg Clayton else 116*cfd1acedSGreg Clayton { 117*cfd1acedSGreg Clayton log->Printf ("SBCompileUnit(%p)::FindLineEntryIndex (start_idx=%u, line=%u, SBFileSpec(%p)) => %u", 118*cfd1acedSGreg Clayton m_opaque_ptr, start_idx, line, inline_file_spec ? inline_file_spec->get() : NULL, index); 119*cfd1acedSGreg Clayton } 120750cd175SCaroline Tice } 121ceb6b139SCaroline Tice 122*cfd1acedSGreg Clayton return index; 12330fdc8d8SChris Lattner } 12430fdc8d8SChris Lattner 12530fdc8d8SChris Lattner bool 12630fdc8d8SChris Lattner SBCompileUnit::IsValid () const 12730fdc8d8SChris Lattner { 1286611103cSGreg Clayton return m_opaque_ptr != NULL; 12930fdc8d8SChris Lattner } 13030fdc8d8SChris Lattner 13130fdc8d8SChris Lattner bool 13230fdc8d8SChris Lattner SBCompileUnit::operator == (const SBCompileUnit &rhs) const 13330fdc8d8SChris Lattner { 1346611103cSGreg Clayton return m_opaque_ptr == rhs.m_opaque_ptr; 13530fdc8d8SChris Lattner } 13630fdc8d8SChris Lattner 13730fdc8d8SChris Lattner bool 13830fdc8d8SChris Lattner SBCompileUnit::operator != (const SBCompileUnit &rhs) const 13930fdc8d8SChris Lattner { 1406611103cSGreg Clayton return m_opaque_ptr != rhs.m_opaque_ptr; 14130fdc8d8SChris Lattner } 14230fdc8d8SChris Lattner 14330fdc8d8SChris Lattner const lldb_private::CompileUnit * 14430fdc8d8SChris Lattner SBCompileUnit::operator->() const 14530fdc8d8SChris Lattner { 1466611103cSGreg Clayton return m_opaque_ptr; 14730fdc8d8SChris Lattner } 14830fdc8d8SChris Lattner 14930fdc8d8SChris Lattner const lldb_private::CompileUnit & 15030fdc8d8SChris Lattner SBCompileUnit::operator*() const 15130fdc8d8SChris Lattner { 1526611103cSGreg Clayton return *m_opaque_ptr; 15330fdc8d8SChris Lattner } 154dde9cff3SCaroline Tice 155750cd175SCaroline Tice const lldb_private::CompileUnit * 156750cd175SCaroline Tice SBCompileUnit::get () const 157750cd175SCaroline Tice { 158750cd175SCaroline Tice return m_opaque_ptr; 159750cd175SCaroline Tice } 160750cd175SCaroline Tice 161dde9cff3SCaroline Tice bool 162dde9cff3SCaroline Tice SBCompileUnit::GetDescription (SBStream &description) 163dde9cff3SCaroline Tice { 164dde9cff3SCaroline Tice if (m_opaque_ptr) 165dde9cff3SCaroline Tice { 166dac97f31SCaroline Tice description.ref(); 167dde9cff3SCaroline Tice m_opaque_ptr->Dump (description.get(), false); 168dde9cff3SCaroline Tice } 169dde9cff3SCaroline Tice else 170dde9cff3SCaroline Tice description.Printf ("No Value"); 171dde9cff3SCaroline Tice 172dde9cff3SCaroline Tice return true; 173dde9cff3SCaroline Tice } 174