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