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 { 742d4edfbcSGreg 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 { 10287df91b8SJim Ingham const bool exact = true; 10387df91b8SJim Ingham return FindLineEntryIndex (start_idx, line, inline_file_spec, exact); 10487df91b8SJim Ingham } 10587df91b8SJim Ingham 10687df91b8SJim Ingham uint32_t 10787df91b8SJim Ingham SBCompileUnit::FindLineEntryIndex (uint32_t start_idx, uint32_t line, SBFileSpec *inline_file_spec, bool exact) const 10887df91b8SJim Ingham { 1092d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 110ceb6b139SCaroline Tice 111cfd1acedSGreg Clayton uint32_t index = UINT32_MAX; 1126611103cSGreg Clayton if (m_opaque_ptr) 11330fdc8d8SChris Lattner { 11430fdc8d8SChris Lattner FileSpec file_spec; 11530fdc8d8SChris Lattner if (inline_file_spec && inline_file_spec->IsValid()) 11630fdc8d8SChris Lattner file_spec = inline_file_spec->ref(); 11730fdc8d8SChris Lattner else 1186611103cSGreg Clayton file_spec = *m_opaque_ptr; 11930fdc8d8SChris Lattner 120ceb6b139SCaroline Tice 121cfd1acedSGreg Clayton index = m_opaque_ptr->FindLineEntry (start_idx, 12230fdc8d8SChris Lattner line, 12330fdc8d8SChris Lattner inline_file_spec ? inline_file_spec->get() : NULL, 12487df91b8SJim Ingham exact, 12530fdc8d8SChris Lattner NULL); 12630fdc8d8SChris Lattner } 127ceb6b139SCaroline Tice 128ceb6b139SCaroline Tice if (log) 129750cd175SCaroline Tice { 130750cd175SCaroline Tice SBStream sstr; 131cfd1acedSGreg Clayton if (index == UINT32_MAX) 132cfd1acedSGreg Clayton { 133cfd1acedSGreg Clayton log->Printf ("SBCompileUnit(%p)::FindLineEntryIndex (start_idx=%u, line=%u, SBFileSpec(%p)) => NOT FOUND", 134cfd1acedSGreg Clayton m_opaque_ptr, start_idx, line, inline_file_spec ? inline_file_spec->get() : NULL); 135cfd1acedSGreg Clayton } 136cfd1acedSGreg Clayton else 137cfd1acedSGreg Clayton { 138cfd1acedSGreg Clayton log->Printf ("SBCompileUnit(%p)::FindLineEntryIndex (start_idx=%u, line=%u, SBFileSpec(%p)) => %u", 139cfd1acedSGreg Clayton m_opaque_ptr, start_idx, line, inline_file_spec ? inline_file_spec->get() : NULL, index); 140cfd1acedSGreg Clayton } 141750cd175SCaroline Tice } 142ceb6b139SCaroline Tice 143cfd1acedSGreg Clayton return index; 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 1768f7180b1SGreg Clayton lldb_private::CompileUnit * 1778f7180b1SGreg Clayton SBCompileUnit::get () 178750cd175SCaroline Tice { 179750cd175SCaroline Tice return m_opaque_ptr; 180750cd175SCaroline Tice } 18172eff18aSGreg Clayton 18272eff18aSGreg Clayton void 18372eff18aSGreg Clayton SBCompileUnit::reset (lldb_private::CompileUnit *lldb_object_ptr) 18472eff18aSGreg Clayton { 18572eff18aSGreg Clayton m_opaque_ptr = lldb_object_ptr; 18672eff18aSGreg Clayton } 18772eff18aSGreg Clayton 188750cd175SCaroline Tice 189dde9cff3SCaroline Tice bool 190dde9cff3SCaroline Tice SBCompileUnit::GetDescription (SBStream &description) 191dde9cff3SCaroline Tice { 192*da7bc7d0SGreg Clayton Stream &strm = description.ref(); 193*da7bc7d0SGreg Clayton 194dde9cff3SCaroline Tice if (m_opaque_ptr) 195dde9cff3SCaroline Tice { 196*da7bc7d0SGreg Clayton m_opaque_ptr->Dump (&strm, false); 197dde9cff3SCaroline Tice } 198dde9cff3SCaroline Tice else 199*da7bc7d0SGreg Clayton strm.PutCString ("No value"); 200dde9cff3SCaroline Tice 201dde9cff3SCaroline Tice return true; 202dde9cff3SCaroline Tice } 203