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" 1630fdc8d8SChris Lattner 1730fdc8d8SChris Lattner using namespace lldb; 1830fdc8d8SChris Lattner using namespace lldb_private; 1930fdc8d8SChris Lattner 2030fdc8d8SChris Lattner 2130fdc8d8SChris Lattner SBCompileUnit::SBCompileUnit () : 226611103cSGreg Clayton m_opaque_ptr (NULL) 2330fdc8d8SChris Lattner { 2430fdc8d8SChris Lattner } 2530fdc8d8SChris Lattner 2630fdc8d8SChris Lattner SBCompileUnit::SBCompileUnit (lldb_private::CompileUnit *lldb_object_ptr) : 276611103cSGreg Clayton m_opaque_ptr (lldb_object_ptr) 2830fdc8d8SChris Lattner { 2930fdc8d8SChris Lattner } 3030fdc8d8SChris Lattner 3130fdc8d8SChris Lattner SBCompileUnit::~SBCompileUnit () 3230fdc8d8SChris Lattner { 336611103cSGreg Clayton m_opaque_ptr = NULL; 3430fdc8d8SChris Lattner } 3530fdc8d8SChris Lattner 3630fdc8d8SChris Lattner SBFileSpec 3730fdc8d8SChris Lattner SBCompileUnit::GetFileSpec () const 3830fdc8d8SChris Lattner { 3930fdc8d8SChris Lattner SBFileSpec file_spec; 406611103cSGreg Clayton if (m_opaque_ptr) 416611103cSGreg Clayton file_spec.SetFileSpec(*m_opaque_ptr); 4230fdc8d8SChris Lattner return file_spec; 4330fdc8d8SChris Lattner } 4430fdc8d8SChris Lattner 4530fdc8d8SChris Lattner uint32_t 4630fdc8d8SChris Lattner SBCompileUnit::GetNumLineEntries () const 4730fdc8d8SChris Lattner { 486611103cSGreg Clayton if (m_opaque_ptr) 4930fdc8d8SChris Lattner { 506611103cSGreg Clayton LineTable *line_table = m_opaque_ptr->GetLineTable (); 5130fdc8d8SChris Lattner if (line_table) 5230fdc8d8SChris Lattner return line_table->GetSize(); 5330fdc8d8SChris Lattner } 5430fdc8d8SChris Lattner return 0; 5530fdc8d8SChris Lattner } 5630fdc8d8SChris Lattner 5730fdc8d8SChris Lattner SBLineEntry 5830fdc8d8SChris Lattner SBCompileUnit::GetLineEntryAtIndex (uint32_t idx) const 5930fdc8d8SChris Lattner { 6030fdc8d8SChris Lattner SBLineEntry sb_line_entry; 616611103cSGreg Clayton if (m_opaque_ptr) 6230fdc8d8SChris Lattner { 636611103cSGreg Clayton LineTable *line_table = m_opaque_ptr->GetLineTable (); 6430fdc8d8SChris Lattner if (line_table) 6530fdc8d8SChris Lattner { 6630fdc8d8SChris Lattner LineEntry line_entry; 6730fdc8d8SChris Lattner if (line_table->GetLineEntryAtIndex(idx, line_entry)) 6830fdc8d8SChris Lattner sb_line_entry.SetLineEntry(line_entry); 6930fdc8d8SChris Lattner } 7030fdc8d8SChris Lattner } 7130fdc8d8SChris Lattner return sb_line_entry; 7230fdc8d8SChris Lattner } 7330fdc8d8SChris Lattner 7430fdc8d8SChris Lattner uint32_t 7530fdc8d8SChris Lattner SBCompileUnit::FindLineEntryIndex (uint32_t start_idx, uint32_t line, SBFileSpec *inline_file_spec) const 7630fdc8d8SChris Lattner { 776611103cSGreg Clayton if (m_opaque_ptr) 7830fdc8d8SChris Lattner { 7930fdc8d8SChris Lattner FileSpec file_spec; 8030fdc8d8SChris Lattner if (inline_file_spec && inline_file_spec->IsValid()) 8130fdc8d8SChris Lattner file_spec = inline_file_spec->ref(); 8230fdc8d8SChris Lattner else 836611103cSGreg Clayton file_spec = *m_opaque_ptr; 8430fdc8d8SChris Lattner 856611103cSGreg Clayton return m_opaque_ptr->FindLineEntry (start_idx, 8630fdc8d8SChris Lattner line, 8730fdc8d8SChris Lattner inline_file_spec ? inline_file_spec->get() : NULL, 8830fdc8d8SChris Lattner NULL); 8930fdc8d8SChris Lattner } 9030fdc8d8SChris Lattner return UINT32_MAX; 9130fdc8d8SChris Lattner } 9230fdc8d8SChris Lattner 9330fdc8d8SChris Lattner bool 9430fdc8d8SChris Lattner SBCompileUnit::IsValid () const 9530fdc8d8SChris Lattner { 966611103cSGreg Clayton return m_opaque_ptr != NULL; 9730fdc8d8SChris Lattner } 9830fdc8d8SChris Lattner 9930fdc8d8SChris Lattner bool 10030fdc8d8SChris Lattner SBCompileUnit::operator == (const SBCompileUnit &rhs) const 10130fdc8d8SChris Lattner { 1026611103cSGreg Clayton return m_opaque_ptr == rhs.m_opaque_ptr; 10330fdc8d8SChris Lattner } 10430fdc8d8SChris Lattner 10530fdc8d8SChris Lattner bool 10630fdc8d8SChris Lattner SBCompileUnit::operator != (const SBCompileUnit &rhs) const 10730fdc8d8SChris Lattner { 1086611103cSGreg Clayton return m_opaque_ptr != rhs.m_opaque_ptr; 10930fdc8d8SChris Lattner } 11030fdc8d8SChris Lattner 11130fdc8d8SChris Lattner const lldb_private::CompileUnit * 11230fdc8d8SChris Lattner SBCompileUnit::operator->() const 11330fdc8d8SChris Lattner { 1146611103cSGreg Clayton return m_opaque_ptr; 11530fdc8d8SChris Lattner } 11630fdc8d8SChris Lattner 11730fdc8d8SChris Lattner const lldb_private::CompileUnit & 11830fdc8d8SChris Lattner SBCompileUnit::operator*() const 11930fdc8d8SChris Lattner { 1206611103cSGreg Clayton return *m_opaque_ptr; 12130fdc8d8SChris Lattner } 122dde9cff3SCaroline Tice 123dde9cff3SCaroline Tice bool 124dde9cff3SCaroline Tice SBCompileUnit::GetDescription (SBStream &description) 125dde9cff3SCaroline Tice { 126dde9cff3SCaroline Tice if (m_opaque_ptr) 127dde9cff3SCaroline Tice { 128*dac97f31SCaroline Tice description.ref(); 129dde9cff3SCaroline Tice m_opaque_ptr->Dump (description.get(), false); 130dde9cff3SCaroline Tice } 131dde9cff3SCaroline Tice else 132dde9cff3SCaroline Tice description.Printf ("No Value"); 133dde9cff3SCaroline Tice 134dde9cff3SCaroline Tice return true; 135dde9cff3SCaroline Tice } 136