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