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 { 74*5160ce5cSGreg Clayton Log *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 { 109*5160ce5cSGreg Clayton Log *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 146873a7a4bSJohnny Chen uint32_t 147873a7a4bSJohnny Chen SBCompileUnit::GetNumSupportFiles () const 148873a7a4bSJohnny Chen { 149873a7a4bSJohnny Chen if (m_opaque_ptr) 150873a7a4bSJohnny Chen { 151873a7a4bSJohnny Chen FileSpecList& support_files = m_opaque_ptr->GetSupportFiles (); 152873a7a4bSJohnny Chen return support_files.GetSize(); 153873a7a4bSJohnny Chen } 154873a7a4bSJohnny Chen return 0; 155873a7a4bSJohnny Chen } 156873a7a4bSJohnny Chen 157873a7a4bSJohnny Chen SBFileSpec 158873a7a4bSJohnny Chen SBCompileUnit::GetSupportFileAtIndex (uint32_t idx) const 159873a7a4bSJohnny Chen { 160*5160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 161873a7a4bSJohnny Chen 162873a7a4bSJohnny Chen SBFileSpec sb_file_spec; 163873a7a4bSJohnny Chen if (m_opaque_ptr) 164873a7a4bSJohnny Chen { 165873a7a4bSJohnny Chen FileSpecList &support_files = m_opaque_ptr->GetSupportFiles (); 166873a7a4bSJohnny Chen FileSpec file_spec = support_files.GetFileSpecAtIndex(idx); 167873a7a4bSJohnny Chen sb_file_spec.SetFileSpec(file_spec); 168873a7a4bSJohnny Chen } 169873a7a4bSJohnny Chen 170873a7a4bSJohnny Chen if (log) 171873a7a4bSJohnny Chen { 172873a7a4bSJohnny Chen SBStream sstr; 173873a7a4bSJohnny Chen sb_file_spec.GetDescription (sstr); 174873a7a4bSJohnny Chen log->Printf ("SBCompileUnit(%p)::GetGetFileSpecAtIndex (idx=%u) => SBFileSpec(%p): '%s'", 175873a7a4bSJohnny Chen m_opaque_ptr, idx, sb_file_spec.get(), sstr.GetData()); 176873a7a4bSJohnny Chen } 177873a7a4bSJohnny Chen 178873a7a4bSJohnny Chen return sb_file_spec; 179873a7a4bSJohnny Chen } 180873a7a4bSJohnny Chen 181873a7a4bSJohnny Chen uint32_t 182873a7a4bSJohnny Chen SBCompileUnit::FindSupportFileIndex (uint32_t start_idx, const SBFileSpec &sb_file, bool full) 183873a7a4bSJohnny Chen { 184873a7a4bSJohnny Chen if (m_opaque_ptr) 185873a7a4bSJohnny Chen { 186873a7a4bSJohnny Chen FileSpecList &support_files = m_opaque_ptr->GetSupportFiles (); 187873a7a4bSJohnny Chen return support_files.FindFileIndex(start_idx, sb_file.ref(), full); 188873a7a4bSJohnny Chen } 189873a7a4bSJohnny Chen return 0; 190873a7a4bSJohnny Chen } 191873a7a4bSJohnny Chen 19230fdc8d8SChris Lattner bool 19330fdc8d8SChris Lattner SBCompileUnit::IsValid () const 19430fdc8d8SChris Lattner { 1956611103cSGreg Clayton return m_opaque_ptr != NULL; 19630fdc8d8SChris Lattner } 19730fdc8d8SChris Lattner 19830fdc8d8SChris Lattner bool 19930fdc8d8SChris Lattner SBCompileUnit::operator == (const SBCompileUnit &rhs) const 20030fdc8d8SChris Lattner { 2016611103cSGreg Clayton return m_opaque_ptr == rhs.m_opaque_ptr; 20230fdc8d8SChris Lattner } 20330fdc8d8SChris Lattner 20430fdc8d8SChris Lattner bool 20530fdc8d8SChris Lattner SBCompileUnit::operator != (const SBCompileUnit &rhs) const 20630fdc8d8SChris Lattner { 2076611103cSGreg Clayton return m_opaque_ptr != rhs.m_opaque_ptr; 20830fdc8d8SChris Lattner } 20930fdc8d8SChris Lattner 21030fdc8d8SChris Lattner const lldb_private::CompileUnit * 21130fdc8d8SChris Lattner SBCompileUnit::operator->() const 21230fdc8d8SChris Lattner { 2136611103cSGreg Clayton return m_opaque_ptr; 21430fdc8d8SChris Lattner } 21530fdc8d8SChris Lattner 21630fdc8d8SChris Lattner const lldb_private::CompileUnit & 21730fdc8d8SChris Lattner SBCompileUnit::operator*() const 21830fdc8d8SChris Lattner { 2196611103cSGreg Clayton return *m_opaque_ptr; 22030fdc8d8SChris Lattner } 221dde9cff3SCaroline Tice 2228f7180b1SGreg Clayton lldb_private::CompileUnit * 2238f7180b1SGreg Clayton SBCompileUnit::get () 224750cd175SCaroline Tice { 225750cd175SCaroline Tice return m_opaque_ptr; 226750cd175SCaroline Tice } 22772eff18aSGreg Clayton 22872eff18aSGreg Clayton void 22972eff18aSGreg Clayton SBCompileUnit::reset (lldb_private::CompileUnit *lldb_object_ptr) 23072eff18aSGreg Clayton { 23172eff18aSGreg Clayton m_opaque_ptr = lldb_object_ptr; 23272eff18aSGreg Clayton } 23372eff18aSGreg Clayton 234750cd175SCaroline Tice 235dde9cff3SCaroline Tice bool 236dde9cff3SCaroline Tice SBCompileUnit::GetDescription (SBStream &description) 237dde9cff3SCaroline Tice { 238da7bc7d0SGreg Clayton Stream &strm = description.ref(); 239da7bc7d0SGreg Clayton 240dde9cff3SCaroline Tice if (m_opaque_ptr) 241dde9cff3SCaroline Tice { 242da7bc7d0SGreg Clayton m_opaque_ptr->Dump (&strm, false); 243dde9cff3SCaroline Tice } 244dde9cff3SCaroline Tice else 245da7bc7d0SGreg Clayton strm.PutCString ("No value"); 246dde9cff3SCaroline Tice 247dde9cff3SCaroline Tice return true; 248dde9cff3SCaroline Tice } 249