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 { 30*750cd175SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 31ceb6b139SCaroline Tice 32ceb6b139SCaroline Tice if (log) 33ceb6b139SCaroline Tice { 34ceb6b139SCaroline Tice SBStream sstr; 35ceb6b139SCaroline Tice GetDescription (sstr); 36*750cd175SCaroline Tice log->Printf ("SBCompileUnit::SBCompileUnit (lldb_private::CompileUnit *lldb_object_ptr=%p)" 37*750cd175SCaroline Tice " => this.obj = %p (%s)", lldb_object_ptr, m_opaque_ptr, sstr.GetData()); 38ceb6b139SCaroline Tice } 3930fdc8d8SChris Lattner } 4030fdc8d8SChris Lattner 4130fdc8d8SChris Lattner SBCompileUnit::~SBCompileUnit () 4230fdc8d8SChris Lattner { 436611103cSGreg Clayton m_opaque_ptr = NULL; 4430fdc8d8SChris Lattner } 4530fdc8d8SChris Lattner 4630fdc8d8SChris Lattner SBFileSpec 4730fdc8d8SChris Lattner SBCompileUnit::GetFileSpec () const 4830fdc8d8SChris Lattner { 4930fdc8d8SChris Lattner SBFileSpec file_spec; 506611103cSGreg Clayton if (m_opaque_ptr) 516611103cSGreg Clayton file_spec.SetFileSpec(*m_opaque_ptr); 5230fdc8d8SChris Lattner return file_spec; 5330fdc8d8SChris Lattner } 5430fdc8d8SChris Lattner 5530fdc8d8SChris Lattner uint32_t 5630fdc8d8SChris Lattner SBCompileUnit::GetNumLineEntries () const 5730fdc8d8SChris Lattner { 586611103cSGreg Clayton if (m_opaque_ptr) 5930fdc8d8SChris Lattner { 606611103cSGreg Clayton LineTable *line_table = m_opaque_ptr->GetLineTable (); 6130fdc8d8SChris Lattner if (line_table) 6230fdc8d8SChris Lattner return line_table->GetSize(); 6330fdc8d8SChris Lattner } 6430fdc8d8SChris Lattner return 0; 6530fdc8d8SChris Lattner } 6630fdc8d8SChris Lattner 6730fdc8d8SChris Lattner SBLineEntry 6830fdc8d8SChris Lattner SBCompileUnit::GetLineEntryAtIndex (uint32_t idx) const 6930fdc8d8SChris Lattner { 70ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 71ceb6b139SCaroline Tice 72*750cd175SCaroline Tice //if (log) 73*750cd175SCaroline Tice // log->Printf ("SBCompileUnit::GetLineEntryAtIndex (this.obj=%p, idx=%d)", m_opaque_ptr, idx); 74ceb6b139SCaroline Tice 7530fdc8d8SChris Lattner SBLineEntry sb_line_entry; 766611103cSGreg Clayton if (m_opaque_ptr) 7730fdc8d8SChris Lattner { 786611103cSGreg Clayton LineTable *line_table = m_opaque_ptr->GetLineTable (); 7930fdc8d8SChris Lattner if (line_table) 8030fdc8d8SChris Lattner { 8130fdc8d8SChris Lattner LineEntry line_entry; 8230fdc8d8SChris Lattner if (line_table->GetLineEntryAtIndex(idx, line_entry)) 8330fdc8d8SChris Lattner sb_line_entry.SetLineEntry(line_entry); 8430fdc8d8SChris Lattner } 8530fdc8d8SChris Lattner } 86ceb6b139SCaroline Tice 87ceb6b139SCaroline Tice if (log) 88ceb6b139SCaroline Tice { 89ceb6b139SCaroline Tice SBStream sstr; 90ceb6b139SCaroline Tice sb_line_entry.GetDescription (sstr); 91*750cd175SCaroline Tice log->Printf ("SBCompileUnit::GetLineEntryAtIndex (this.obj=%p, idx=%d) => SBLineEntry: '%s'", m_opaque_ptr, 92*750cd175SCaroline Tice idx, sstr.GetData()); 93ceb6b139SCaroline Tice } 94ceb6b139SCaroline Tice 9530fdc8d8SChris Lattner return sb_line_entry; 9630fdc8d8SChris Lattner } 9730fdc8d8SChris Lattner 9830fdc8d8SChris Lattner uint32_t 9930fdc8d8SChris Lattner SBCompileUnit::FindLineEntryIndex (uint32_t start_idx, uint32_t line, SBFileSpec *inline_file_spec) const 10030fdc8d8SChris Lattner { 101ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 102ceb6b139SCaroline Tice 103*750cd175SCaroline Tice //if (log) 104*750cd175SCaroline Tice //{ 105*750cd175SCaroline Tice // SBStream sstr; 106*750cd175SCaroline Tice // inline_file_spec->GetDescription (sstr); 107*750cd175SCaroline Tice // log->Printf ("SBCompileUnit::FindLineEntryIndex (this.obj=%p, start_idx=%d, line=%d, inline_file_spec='%s')", 108*750cd175SCaroline Tice // m_opaque_ptr, start_idx, line, sstr.GetData()); 109*750cd175SCaroline Tice //} 110ceb6b139SCaroline Tice 1116611103cSGreg Clayton if (m_opaque_ptr) 11230fdc8d8SChris Lattner { 11330fdc8d8SChris Lattner FileSpec file_spec; 11430fdc8d8SChris Lattner if (inline_file_spec && inline_file_spec->IsValid()) 11530fdc8d8SChris Lattner file_spec = inline_file_spec->ref(); 11630fdc8d8SChris Lattner else 1176611103cSGreg Clayton file_spec = *m_opaque_ptr; 11830fdc8d8SChris Lattner 119ceb6b139SCaroline Tice 120ceb6b139SCaroline Tice uint32_t ret_value = m_opaque_ptr->FindLineEntry (start_idx, 12130fdc8d8SChris Lattner line, 12230fdc8d8SChris Lattner inline_file_spec ? inline_file_spec->get() : NULL, 12330fdc8d8SChris Lattner NULL); 124ceb6b139SCaroline Tice if (log) 125*750cd175SCaroline Tice { 126*750cd175SCaroline Tice SBStream sstr; 127*750cd175SCaroline Tice inline_file_spec->GetDescription (sstr); 128*750cd175SCaroline Tice log->Printf ("SBCompileUnit::FindLineEntryIndex(this.obj=%p, start_idx=%d, line=%d, inline_file_spec='%s')" 129*750cd175SCaroline Tice "=> '%d'", m_opaque_ptr, start_idx, line, sstr.GetData(), ret_value); 130*750cd175SCaroline Tice } 131ceb6b139SCaroline Tice 132ceb6b139SCaroline Tice return ret_value; 13330fdc8d8SChris Lattner } 134ceb6b139SCaroline Tice 135ceb6b139SCaroline Tice if (log) 136*750cd175SCaroline Tice { 137*750cd175SCaroline Tice SBStream sstr; 138*750cd175SCaroline Tice inline_file_spec->GetDescription (sstr); 139*750cd175SCaroline Tice log->Printf ("SBCompileUnit::FindLineEntryIndex (this.obj=%p, start_idx=%d, line=%d, inline_file_spec='%s')" 140*750cd175SCaroline Tice " => '%d'", m_opaque_ptr, start_idx, line, sstr.GetData(), UINT32_MAX); 141*750cd175SCaroline Tice } 142ceb6b139SCaroline Tice 14330fdc8d8SChris Lattner return UINT32_MAX; 14430fdc8d8SChris Lattner } 14530fdc8d8SChris Lattner 14630fdc8d8SChris Lattner bool 14730fdc8d8SChris Lattner SBCompileUnit::IsValid () const 14830fdc8d8SChris Lattner { 1496611103cSGreg Clayton return m_opaque_ptr != NULL; 15030fdc8d8SChris Lattner } 15130fdc8d8SChris Lattner 15230fdc8d8SChris Lattner bool 15330fdc8d8SChris Lattner SBCompileUnit::operator == (const SBCompileUnit &rhs) const 15430fdc8d8SChris Lattner { 1556611103cSGreg Clayton return m_opaque_ptr == rhs.m_opaque_ptr; 15630fdc8d8SChris Lattner } 15730fdc8d8SChris Lattner 15830fdc8d8SChris Lattner bool 15930fdc8d8SChris Lattner SBCompileUnit::operator != (const SBCompileUnit &rhs) const 16030fdc8d8SChris Lattner { 1616611103cSGreg Clayton return m_opaque_ptr != rhs.m_opaque_ptr; 16230fdc8d8SChris Lattner } 16330fdc8d8SChris Lattner 16430fdc8d8SChris Lattner const lldb_private::CompileUnit * 16530fdc8d8SChris Lattner SBCompileUnit::operator->() const 16630fdc8d8SChris Lattner { 1676611103cSGreg Clayton return m_opaque_ptr; 16830fdc8d8SChris Lattner } 16930fdc8d8SChris Lattner 17030fdc8d8SChris Lattner const lldb_private::CompileUnit & 17130fdc8d8SChris Lattner SBCompileUnit::operator*() const 17230fdc8d8SChris Lattner { 1736611103cSGreg Clayton return *m_opaque_ptr; 17430fdc8d8SChris Lattner } 175dde9cff3SCaroline Tice 176*750cd175SCaroline Tice const lldb_private::CompileUnit * 177*750cd175SCaroline Tice SBCompileUnit::get () const 178*750cd175SCaroline Tice { 179*750cd175SCaroline Tice return m_opaque_ptr; 180*750cd175SCaroline Tice } 181*750cd175SCaroline Tice 182dde9cff3SCaroline Tice bool 183dde9cff3SCaroline Tice SBCompileUnit::GetDescription (SBStream &description) 184dde9cff3SCaroline Tice { 185dde9cff3SCaroline Tice if (m_opaque_ptr) 186dde9cff3SCaroline Tice { 187dac97f31SCaroline Tice description.ref(); 188dde9cff3SCaroline Tice m_opaque_ptr->Dump (description.get(), false); 189dde9cff3SCaroline Tice } 190dde9cff3SCaroline Tice else 191dde9cff3SCaroline Tice description.Printf ("No Value"); 192dde9cff3SCaroline Tice 193dde9cff3SCaroline Tice return true; 194dde9cff3SCaroline Tice } 195