blob: 5d904ce56300421bda9329bd75bce24364384af8 [file] [log] [blame]
Chris Lattner30fdc8d2010-06-08 16:52:24 +00001//===-- 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"
Caroline Ticedde9cff2010-09-20 05:20:02 +000012#include "lldb/API/SBStream.h"
Greg Claytonf02500c2013-06-18 22:51:05 +000013#include "lldb/Core/Log.h"
14#include "lldb/Core/Module.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000015#include "lldb/Symbol/CompileUnit.h"
16#include "lldb/Symbol/LineEntry.h"
17#include "lldb/Symbol/LineTable.h"
Greg Claytonf02500c2013-06-18 22:51:05 +000018#include "lldb/Symbol/SymbolVendor.h"
19#include "lldb/Symbol/Type.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000020
21using namespace lldb;
22using namespace lldb_private;
23
24
25SBCompileUnit::SBCompileUnit () :
Greg Clayton66111032010-06-23 01:19:29 +000026 m_opaque_ptr (NULL)
Chris Lattner30fdc8d2010-06-08 16:52:24 +000027{
28}
29
30SBCompileUnit::SBCompileUnit (lldb_private::CompileUnit *lldb_object_ptr) :
Greg Clayton66111032010-06-23 01:19:29 +000031 m_opaque_ptr (lldb_object_ptr)
Chris Lattner30fdc8d2010-06-08 16:52:24 +000032{
33}
34
Greg Claytonefabb122010-11-05 23:17:00 +000035SBCompileUnit::SBCompileUnit(const SBCompileUnit &rhs) :
36 m_opaque_ptr (rhs.m_opaque_ptr)
37{
38}
39
40const SBCompileUnit &
41SBCompileUnit::operator = (const SBCompileUnit &rhs)
42{
43 m_opaque_ptr = rhs.m_opaque_ptr;
44 return *this;
45}
46
47
Chris Lattner30fdc8d2010-06-08 16:52:24 +000048SBCompileUnit::~SBCompileUnit ()
49{
Greg Clayton66111032010-06-23 01:19:29 +000050 m_opaque_ptr = NULL;
Chris Lattner30fdc8d2010-06-08 16:52:24 +000051}
52
53SBFileSpec
54SBCompileUnit::GetFileSpec () const
55{
56 SBFileSpec file_spec;
Greg Clayton66111032010-06-23 01:19:29 +000057 if (m_opaque_ptr)
58 file_spec.SetFileSpec(*m_opaque_ptr);
Chris Lattner30fdc8d2010-06-08 16:52:24 +000059 return file_spec;
60}
61
62uint32_t
63SBCompileUnit::GetNumLineEntries () const
64{
Greg Clayton66111032010-06-23 01:19:29 +000065 if (m_opaque_ptr)
Chris Lattner30fdc8d2010-06-08 16:52:24 +000066 {
Greg Clayton66111032010-06-23 01:19:29 +000067 LineTable *line_table = m_opaque_ptr->GetLineTable ();
Chris Lattner30fdc8d2010-06-08 16:52:24 +000068 if (line_table)
69 return line_table->GetSize();
70 }
71 return 0;
72}
73
74SBLineEntry
75SBCompileUnit::GetLineEntryAtIndex (uint32_t idx) const
76{
Greg Clayton5160ce52013-03-27 23:08:40 +000077 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Ticeceb6b132010-10-26 03:11:13 +000078
Chris Lattner30fdc8d2010-06-08 16:52:24 +000079 SBLineEntry sb_line_entry;
Greg Clayton66111032010-06-23 01:19:29 +000080 if (m_opaque_ptr)
Chris Lattner30fdc8d2010-06-08 16:52:24 +000081 {
Greg Clayton66111032010-06-23 01:19:29 +000082 LineTable *line_table = m_opaque_ptr->GetLineTable ();
Chris Lattner30fdc8d2010-06-08 16:52:24 +000083 if (line_table)
84 {
85 LineEntry line_entry;
86 if (line_table->GetLineEntryAtIndex(idx, line_entry))
87 sb_line_entry.SetLineEntry(line_entry);
88 }
89 }
Saleem Abdulrasool324a1032014-04-04 04:06:10 +000090
Caroline Ticeceb6b132010-10-26 03:11:13 +000091 if (log)
92 {
93 SBStream sstr;
94 sb_line_entry.GetDescription (sstr);
Saleem Abdulrasool324a1032014-04-04 04:06:10 +000095 log->Printf ("SBCompileUnit(%p)::GetLineEntryAtIndex (idx=%u) => SBLineEntry(%p): '%s'",
96 static_cast<void*>(m_opaque_ptr), idx,
97 static_cast<void*>(sb_line_entry.get()), sstr.GetData());
Caroline Ticeceb6b132010-10-26 03:11:13 +000098 }
99
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000100 return sb_line_entry;
101}
102
103uint32_t
104SBCompileUnit::FindLineEntryIndex (uint32_t start_idx, uint32_t line, SBFileSpec *inline_file_spec) const
105{
Jim Ingham87df91b2011-09-23 00:54:11 +0000106 const bool exact = true;
107 return FindLineEntryIndex (start_idx, line, inline_file_spec, exact);
108}
109
110uint32_t
111SBCompileUnit::FindLineEntryIndex (uint32_t start_idx, uint32_t line, SBFileSpec *inline_file_spec, bool exact) const
112{
Greg Clayton5160ce52013-03-27 23:08:40 +0000113 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Ticeceb6b132010-10-26 03:11:13 +0000114
Greg Claytoncfd1ace2010-10-31 03:01:06 +0000115 uint32_t index = UINT32_MAX;
Greg Clayton66111032010-06-23 01:19:29 +0000116 if (m_opaque_ptr)
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000117 {
118 FileSpec file_spec;
119 if (inline_file_spec && inline_file_spec->IsValid())
120 file_spec = inline_file_spec->ref();
121 else
Greg Clayton66111032010-06-23 01:19:29 +0000122 file_spec = *m_opaque_ptr;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000123
Greg Claytoncfd1ace2010-10-31 03:01:06 +0000124 index = m_opaque_ptr->FindLineEntry (start_idx,
125 line,
126 inline_file_spec ? inline_file_spec->get() : NULL,
Jim Ingham87df91b2011-09-23 00:54:11 +0000127 exact,
Greg Claytoncfd1ace2010-10-31 03:01:06 +0000128 NULL);
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000129 }
Caroline Ticeceb6b132010-10-26 03:11:13 +0000130
131 if (log)
Caroline Tice750cd172010-10-26 23:49:36 +0000132 {
133 SBStream sstr;
Greg Claytoncfd1ace2010-10-31 03:01:06 +0000134 if (index == UINT32_MAX)
135 {
Saleem Abdulrasool324a1032014-04-04 04:06:10 +0000136 log->Printf ("SBCompileUnit(%p)::FindLineEntryIndex (start_idx=%u, line=%u, SBFileSpec(%p)) => NOT FOUND",
137 static_cast<void*>(m_opaque_ptr), start_idx, line,
138 inline_file_spec
139 ? static_cast<const void*>(inline_file_spec->get())
140 : NULL);
Greg Claytoncfd1ace2010-10-31 03:01:06 +0000141 }
142 else
143 {
Saleem Abdulrasool324a1032014-04-04 04:06:10 +0000144 log->Printf ("SBCompileUnit(%p)::FindLineEntryIndex (start_idx=%u, line=%u, SBFileSpec(%p)) => %u",
145 static_cast<void*>(m_opaque_ptr), start_idx, line,
146 inline_file_spec
147 ? static_cast<const void*>(inline_file_spec->get())
148 : NULL,
149 index);
Greg Claytoncfd1ace2010-10-31 03:01:06 +0000150 }
Caroline Tice750cd172010-10-26 23:49:36 +0000151 }
Caroline Ticeceb6b132010-10-26 03:11:13 +0000152
Greg Claytoncfd1ace2010-10-31 03:01:06 +0000153 return index;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000154}
155
Johnny Chen873a7a42012-03-16 20:46:10 +0000156uint32_t
157SBCompileUnit::GetNumSupportFiles () const
158{
159 if (m_opaque_ptr)
160 {
Greg Claytonf02500c2013-06-18 22:51:05 +0000161 FileSpecList& support_files = m_opaque_ptr->GetSupportFiles ();
162 return support_files.GetSize();
Johnny Chen873a7a42012-03-16 20:46:10 +0000163 }
164 return 0;
165}
166
Greg Claytonf02500c2013-06-18 22:51:05 +0000167
168
169lldb::SBTypeList
170SBCompileUnit::GetTypes (uint32_t type_mask)
171{
172 SBTypeList sb_type_list;
173
174 if (m_opaque_ptr)
175 {
176 ModuleSP module_sp (m_opaque_ptr->GetModule());
177 if (module_sp)
178 {
179 SymbolVendor* vendor = module_sp->GetSymbolVendor();
180 if (vendor)
181 {
182 TypeList type_list;
183 vendor->GetTypes (m_opaque_ptr, type_mask, type_list);
184 sb_type_list.m_opaque_ap->Append(type_list);
185 }
186 }
187 }
188 return sb_type_list;
189}
190
191
192
193
Johnny Chen873a7a42012-03-16 20:46:10 +0000194SBFileSpec
195SBCompileUnit::GetSupportFileAtIndex (uint32_t idx) const
196{
Greg Clayton5160ce52013-03-27 23:08:40 +0000197 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Johnny Chen873a7a42012-03-16 20:46:10 +0000198
199 SBFileSpec sb_file_spec;
200 if (m_opaque_ptr)
201 {
Greg Claytonf02500c2013-06-18 22:51:05 +0000202 FileSpecList &support_files = m_opaque_ptr->GetSupportFiles ();
203 FileSpec file_spec = support_files.GetFileSpecAtIndex(idx);
204 sb_file_spec.SetFileSpec(file_spec);
Johnny Chen873a7a42012-03-16 20:46:10 +0000205 }
Saleem Abdulrasool324a1032014-04-04 04:06:10 +0000206
Johnny Chen873a7a42012-03-16 20:46:10 +0000207 if (log)
208 {
209 SBStream sstr;
210 sb_file_spec.GetDescription (sstr);
Saleem Abdulrasool324a1032014-04-04 04:06:10 +0000211 log->Printf ("SBCompileUnit(%p)::GetGetFileSpecAtIndex (idx=%u) => SBFileSpec(%p): '%s'",
212 static_cast<void*>(m_opaque_ptr), idx,
213 static_cast<const void*>(sb_file_spec.get()),
214 sstr.GetData());
Johnny Chen873a7a42012-03-16 20:46:10 +0000215 }
216
217 return sb_file_spec;
218}
219
220uint32_t
221SBCompileUnit::FindSupportFileIndex (uint32_t start_idx, const SBFileSpec &sb_file, bool full)
222{
223 if (m_opaque_ptr)
224 {
225 FileSpecList &support_files = m_opaque_ptr->GetSupportFiles ();
226 return support_files.FindFileIndex(start_idx, sb_file.ref(), full);
227 }
228 return 0;
229}
230
Enrico Granata6cd8e0c2014-11-17 23:06:20 +0000231lldb::LanguageType
232SBCompileUnit::GetLanguage ()
233{
234 if (m_opaque_ptr)
235 return m_opaque_ptr->GetLanguage();
236 return lldb::eLanguageTypeUnknown;
237}
238
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000239bool
240SBCompileUnit::IsValid () const
241{
Greg Clayton66111032010-06-23 01:19:29 +0000242 return m_opaque_ptr != NULL;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000243}
244
245bool
246SBCompileUnit::operator == (const SBCompileUnit &rhs) const
247{
Greg Clayton66111032010-06-23 01:19:29 +0000248 return m_opaque_ptr == rhs.m_opaque_ptr;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000249}
250
251bool
252SBCompileUnit::operator != (const SBCompileUnit &rhs) const
253{
Greg Clayton66111032010-06-23 01:19:29 +0000254 return m_opaque_ptr != rhs.m_opaque_ptr;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000255}
256
257const lldb_private::CompileUnit *
258SBCompileUnit::operator->() const
259{
Greg Clayton66111032010-06-23 01:19:29 +0000260 return m_opaque_ptr;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000261}
262
263const lldb_private::CompileUnit &
264SBCompileUnit::operator*() const
265{
Greg Clayton66111032010-06-23 01:19:29 +0000266 return *m_opaque_ptr;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000267}
Caroline Ticedde9cff2010-09-20 05:20:02 +0000268
Greg Clayton8f7180b2011-09-26 07:11:27 +0000269lldb_private::CompileUnit *
270SBCompileUnit::get ()
Caroline Tice750cd172010-10-26 23:49:36 +0000271{
272 return m_opaque_ptr;
273}
Greg Clayton72eff182010-12-14 04:58:53 +0000274
275void
276SBCompileUnit::reset (lldb_private::CompileUnit *lldb_object_ptr)
277{
278 m_opaque_ptr = lldb_object_ptr;
279}
280
Caroline Tice750cd172010-10-26 23:49:36 +0000281
Caroline Ticedde9cff2010-09-20 05:20:02 +0000282bool
283SBCompileUnit::GetDescription (SBStream &description)
284{
Greg Claytonda7bc7d2011-11-13 06:57:31 +0000285 Stream &strm = description.ref();
286
Caroline Ticedde9cff2010-09-20 05:20:02 +0000287 if (m_opaque_ptr)
Caroline Tice201a8852010-09-20 16:21:41 +0000288 {
Greg Claytonda7bc7d2011-11-13 06:57:31 +0000289 m_opaque_ptr->Dump (&strm, false);
Caroline Tice201a8852010-09-20 16:21:41 +0000290 }
Caroline Ticedde9cff2010-09-20 05:20:02 +0000291 else
Greg Claytonda7bc7d2011-11-13 06:57:31 +0000292 strm.PutCString ("No value");
Caroline Ticedde9cff2010-09-20 05:20:02 +0000293
294 return true;
295}