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