1*30fdc8d8SChris Lattner //===-- SBCompileUnit.cpp ---------------------------------------*- C++ -*-===// 2*30fdc8d8SChris Lattner // 3*30fdc8d8SChris Lattner // The LLVM Compiler Infrastructure 4*30fdc8d8SChris Lattner // 5*30fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source 6*30fdc8d8SChris Lattner // License. See LICENSE.TXT for details. 7*30fdc8d8SChris Lattner // 8*30fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 9*30fdc8d8SChris Lattner 10*30fdc8d8SChris Lattner #include "lldb/API/SBCompileUnit.h" 11*30fdc8d8SChris Lattner #include "lldb/API/SBLineEntry.h" 12*30fdc8d8SChris Lattner #include "lldb/Symbol/CompileUnit.h" 13*30fdc8d8SChris Lattner #include "lldb/Symbol/LineEntry.h" 14*30fdc8d8SChris Lattner #include "lldb/Symbol/LineTable.h" 15*30fdc8d8SChris Lattner 16*30fdc8d8SChris Lattner using namespace lldb; 17*30fdc8d8SChris Lattner using namespace lldb_private; 18*30fdc8d8SChris Lattner 19*30fdc8d8SChris Lattner 20*30fdc8d8SChris Lattner SBCompileUnit::SBCompileUnit () : 21*30fdc8d8SChris Lattner m_lldb_object_ptr (NULL) 22*30fdc8d8SChris Lattner { 23*30fdc8d8SChris Lattner } 24*30fdc8d8SChris Lattner 25*30fdc8d8SChris Lattner SBCompileUnit::SBCompileUnit (lldb_private::CompileUnit *lldb_object_ptr) : 26*30fdc8d8SChris Lattner m_lldb_object_ptr (lldb_object_ptr) 27*30fdc8d8SChris Lattner { 28*30fdc8d8SChris Lattner } 29*30fdc8d8SChris Lattner 30*30fdc8d8SChris Lattner SBCompileUnit::~SBCompileUnit () 31*30fdc8d8SChris Lattner { 32*30fdc8d8SChris Lattner m_lldb_object_ptr = NULL; 33*30fdc8d8SChris Lattner } 34*30fdc8d8SChris Lattner 35*30fdc8d8SChris Lattner SBFileSpec 36*30fdc8d8SChris Lattner SBCompileUnit::GetFileSpec () const 37*30fdc8d8SChris Lattner { 38*30fdc8d8SChris Lattner SBFileSpec file_spec; 39*30fdc8d8SChris Lattner if (m_lldb_object_ptr) 40*30fdc8d8SChris Lattner file_spec.SetFileSpec(*m_lldb_object_ptr); 41*30fdc8d8SChris Lattner return file_spec; 42*30fdc8d8SChris Lattner } 43*30fdc8d8SChris Lattner 44*30fdc8d8SChris Lattner uint32_t 45*30fdc8d8SChris Lattner SBCompileUnit::GetNumLineEntries () const 46*30fdc8d8SChris Lattner { 47*30fdc8d8SChris Lattner if (m_lldb_object_ptr) 48*30fdc8d8SChris Lattner { 49*30fdc8d8SChris Lattner LineTable *line_table = m_lldb_object_ptr->GetLineTable (); 50*30fdc8d8SChris Lattner if (line_table) 51*30fdc8d8SChris Lattner return line_table->GetSize(); 52*30fdc8d8SChris Lattner } 53*30fdc8d8SChris Lattner return 0; 54*30fdc8d8SChris Lattner } 55*30fdc8d8SChris Lattner 56*30fdc8d8SChris Lattner SBLineEntry 57*30fdc8d8SChris Lattner SBCompileUnit::GetLineEntryAtIndex (uint32_t idx) const 58*30fdc8d8SChris Lattner { 59*30fdc8d8SChris Lattner SBLineEntry sb_line_entry; 60*30fdc8d8SChris Lattner if (m_lldb_object_ptr) 61*30fdc8d8SChris Lattner { 62*30fdc8d8SChris Lattner LineTable *line_table = m_lldb_object_ptr->GetLineTable (); 63*30fdc8d8SChris Lattner if (line_table) 64*30fdc8d8SChris Lattner { 65*30fdc8d8SChris Lattner LineEntry line_entry; 66*30fdc8d8SChris Lattner if (line_table->GetLineEntryAtIndex(idx, line_entry)) 67*30fdc8d8SChris Lattner sb_line_entry.SetLineEntry(line_entry); 68*30fdc8d8SChris Lattner } 69*30fdc8d8SChris Lattner } 70*30fdc8d8SChris Lattner return sb_line_entry; 71*30fdc8d8SChris Lattner } 72*30fdc8d8SChris Lattner 73*30fdc8d8SChris Lattner uint32_t 74*30fdc8d8SChris Lattner SBCompileUnit::FindLineEntryIndex (uint32_t start_idx, uint32_t line, SBFileSpec *inline_file_spec) const 75*30fdc8d8SChris Lattner { 76*30fdc8d8SChris Lattner if (m_lldb_object_ptr) 77*30fdc8d8SChris Lattner { 78*30fdc8d8SChris Lattner FileSpec file_spec; 79*30fdc8d8SChris Lattner if (inline_file_spec && inline_file_spec->IsValid()) 80*30fdc8d8SChris Lattner file_spec = inline_file_spec->ref(); 81*30fdc8d8SChris Lattner else 82*30fdc8d8SChris Lattner file_spec = *m_lldb_object_ptr; 83*30fdc8d8SChris Lattner 84*30fdc8d8SChris Lattner return m_lldb_object_ptr->FindLineEntry (start_idx, 85*30fdc8d8SChris Lattner line, 86*30fdc8d8SChris Lattner inline_file_spec ? inline_file_spec->get() : NULL, 87*30fdc8d8SChris Lattner NULL); 88*30fdc8d8SChris Lattner } 89*30fdc8d8SChris Lattner return UINT32_MAX; 90*30fdc8d8SChris Lattner } 91*30fdc8d8SChris Lattner 92*30fdc8d8SChris Lattner bool 93*30fdc8d8SChris Lattner SBCompileUnit::IsValid () const 94*30fdc8d8SChris Lattner { 95*30fdc8d8SChris Lattner return m_lldb_object_ptr != NULL; 96*30fdc8d8SChris Lattner } 97*30fdc8d8SChris Lattner 98*30fdc8d8SChris Lattner bool 99*30fdc8d8SChris Lattner SBCompileUnit::operator == (const SBCompileUnit &rhs) const 100*30fdc8d8SChris Lattner { 101*30fdc8d8SChris Lattner return m_lldb_object_ptr == rhs.m_lldb_object_ptr; 102*30fdc8d8SChris Lattner } 103*30fdc8d8SChris Lattner 104*30fdc8d8SChris Lattner bool 105*30fdc8d8SChris Lattner SBCompileUnit::operator != (const SBCompileUnit &rhs) const 106*30fdc8d8SChris Lattner { 107*30fdc8d8SChris Lattner return m_lldb_object_ptr != rhs.m_lldb_object_ptr; 108*30fdc8d8SChris Lattner } 109*30fdc8d8SChris Lattner 110*30fdc8d8SChris Lattner const lldb_private::CompileUnit * 111*30fdc8d8SChris Lattner SBCompileUnit::operator->() const 112*30fdc8d8SChris Lattner { 113*30fdc8d8SChris Lattner return m_lldb_object_ptr; 114*30fdc8d8SChris Lattner } 115*30fdc8d8SChris Lattner 116*30fdc8d8SChris Lattner const lldb_private::CompileUnit & 117*30fdc8d8SChris Lattner SBCompileUnit::operator*() const 118*30fdc8d8SChris Lattner { 119*30fdc8d8SChris Lattner return *m_lldb_object_ptr; 120*30fdc8d8SChris Lattner } 121