blob: 8010af204a8b77104b90a6808d4b080b1931cdca [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- SBSymbolContext.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/SBSymbolContext.h"
Caroline Tice98f930f2010-09-20 05:20:02 +000011#include "lldb/API/SBStream.h"
Chris Lattner24943d22010-06-08 16:52:24 +000012#include "lldb/Symbol/SymbolContext.h"
Caroline Tice7826c882010-10-26 03:11:13 +000013#include "lldb/Core/Log.h"
Chris Lattner24943d22010-06-08 16:52:24 +000014
15using namespace lldb;
16using namespace lldb_private;
17
18
19
20SBSymbolContext::SBSymbolContext () :
Greg Clayton63094e02010-06-23 01:19:29 +000021 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000022{
Caroline Tice7826c882010-10-26 03:11:13 +000023 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE);
24
25 if (log)
26 log->Printf ("SBSymbolContext::SBSymbolContext () ==> this = %p", this);
Chris Lattner24943d22010-06-08 16:52:24 +000027}
28
29SBSymbolContext::SBSymbolContext (const SymbolContext *sc_ptr) :
Greg Clayton63094e02010-06-23 01:19:29 +000030 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000031{
Caroline Tice7826c882010-10-26 03:11:13 +000032 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE);
33
Chris Lattner24943d22010-06-08 16:52:24 +000034 if (sc_ptr)
Greg Clayton63094e02010-06-23 01:19:29 +000035 m_opaque_ap.reset (new SymbolContext (*sc_ptr));
Caroline Tice7826c882010-10-26 03:11:13 +000036
37 if (log)
38 {
39 SBStream sstr;
40 GetDescription (sstr);
41 log->Printf ("SBSymbolContext::SBSymcolContext (const SymbolContext *sc_ptr) sc_ptr = %p ==> this = %p (%s)",
42 sc_ptr, this, sstr.GetData());
43 }
Chris Lattner24943d22010-06-08 16:52:24 +000044}
45
46SBSymbolContext::SBSymbolContext (const SBSymbolContext& rhs) :
Greg Clayton63094e02010-06-23 01:19:29 +000047 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000048{
Caroline Tice7826c882010-10-26 03:11:13 +000049 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE);
50
51 if (log)
52 log->Printf ("SBSymbolContext::SBSymcolContext (const SBSymbolContext &rhs) rhs.m_opaque_ap.get() = %p "
53 "==> this = %p", (rhs.IsValid() ? rhs.m_opaque_ap.get() : NULL), this);
54
Chris Lattner24943d22010-06-08 16:52:24 +000055 if (rhs.IsValid())
Caroline Ticee49ec182010-09-22 23:01:29 +000056 {
57 if (m_opaque_ap.get())
58 *m_opaque_ap = *rhs.m_opaque_ap;
59 else
60 ref() = *rhs.m_opaque_ap;
61 }
Caroline Tice7826c882010-10-26 03:11:13 +000062
Chris Lattner24943d22010-06-08 16:52:24 +000063}
64
65SBSymbolContext::~SBSymbolContext ()
66{
67}
68
69const SBSymbolContext &
70SBSymbolContext::operator = (const SBSymbolContext &rhs)
71{
72 if (this != &rhs)
73 {
74 if (rhs.IsValid())
Greg Clayton63094e02010-06-23 01:19:29 +000075 m_opaque_ap.reset (new lldb_private::SymbolContext(*rhs.m_opaque_ap.get()));
Chris Lattner24943d22010-06-08 16:52:24 +000076 }
77 return *this;
78}
79
80void
81SBSymbolContext::SetSymbolContext (const SymbolContext *sc_ptr)
82{
83 if (sc_ptr)
84 {
Greg Clayton63094e02010-06-23 01:19:29 +000085 if (m_opaque_ap.get())
86 *m_opaque_ap = *sc_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000087 else
Greg Clayton63094e02010-06-23 01:19:29 +000088 m_opaque_ap.reset (new SymbolContext (*sc_ptr));
Chris Lattner24943d22010-06-08 16:52:24 +000089 }
90 else
91 {
Greg Clayton63094e02010-06-23 01:19:29 +000092 if (m_opaque_ap.get())
93 m_opaque_ap->Clear();
Chris Lattner24943d22010-06-08 16:52:24 +000094 }
95}
96
97bool
98SBSymbolContext::IsValid () const
99{
Greg Clayton63094e02010-06-23 01:19:29 +0000100 return m_opaque_ap.get() != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +0000101}
102
103
104
105SBModule
106SBSymbolContext::GetModule ()
107{
Caroline Tice7826c882010-10-26 03:11:13 +0000108 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
109
110 if (log)
111 log->Printf ("SBSymbolContext::GetModule ()");
112
Chris Lattner24943d22010-06-08 16:52:24 +0000113 SBModule sb_module;
Greg Clayton63094e02010-06-23 01:19:29 +0000114 if (m_opaque_ap.get())
115 sb_module.SetModule(m_opaque_ap->module_sp);
Caroline Tice7826c882010-10-26 03:11:13 +0000116
117 if (log)
118 {
119 SBStream sstr;
120 sb_module.GetDescription (sstr);
121 log->Printf ("SBSymbolContext::GetModule ==> SBModule (this = %p, '%s')", &sb_module, sstr.GetData());
122 }
123
Chris Lattner24943d22010-06-08 16:52:24 +0000124 return sb_module;
125}
126
127SBCompileUnit
128SBSymbolContext::GetCompileUnit ()
129{
Greg Clayton63094e02010-06-23 01:19:29 +0000130 return SBCompileUnit (m_opaque_ap.get() ? m_opaque_ap->comp_unit : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000131}
132
133SBFunction
134SBSymbolContext::GetFunction ()
135{
Caroline Tice7826c882010-10-26 03:11:13 +0000136 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
137
138 if (log)
139 log->Printf ("SBSymbolContext::GetFunction ()");
140
141 SBFunction ret_function (m_opaque_ap.get() ? m_opaque_ap->function : NULL);
142
143 if (log)
144 log->Printf ("SBSymbolContext::GetFunction ==> SBFunction (this = %p, '%s')", &ret_function,
145 ret_function.GetName());
146
147 return ret_function;
Chris Lattner24943d22010-06-08 16:52:24 +0000148}
149
150SBBlock
151SBSymbolContext::GetBlock ()
152{
Greg Clayton63094e02010-06-23 01:19:29 +0000153 return SBBlock (m_opaque_ap.get() ? m_opaque_ap->block : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000154}
155
156SBLineEntry
157SBSymbolContext::GetLineEntry ()
158{
Caroline Tice7826c882010-10-26 03:11:13 +0000159 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
160
161 if (log)
162 log->Printf ("SBSymbolContext::GetLineEntry ()");
163
Chris Lattner24943d22010-06-08 16:52:24 +0000164 SBLineEntry sb_line_entry;
Greg Clayton63094e02010-06-23 01:19:29 +0000165 if (m_opaque_ap.get())
166 sb_line_entry.SetLineEntry (m_opaque_ap->line_entry);
Chris Lattner24943d22010-06-08 16:52:24 +0000167
Caroline Tice7826c882010-10-26 03:11:13 +0000168 if (log)
169 {
170 SBStream sstr;
171 sb_line_entry.GetDescription (sstr);
172 log->Printf ("SBSymbolContext::GetLineEntry ==> SBLineEntry (this = %p, '%s')", &sb_line_entry,
173 sstr.GetData());
174 }
175
Chris Lattner24943d22010-06-08 16:52:24 +0000176 return sb_line_entry;
177}
178
179SBSymbol
180SBSymbolContext::GetSymbol ()
181{
Caroline Tice7826c882010-10-26 03:11:13 +0000182 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
183
184 if (log)
185 log->Printf ("SBSymbolContext::GetSymbol ()");
186
187 SBSymbol ret_symbol (m_opaque_ap.get() ? m_opaque_ap->symbol : NULL);
188
189 if (log)
190 {
191 SBStream sstr;
192 ret_symbol.GetDescription (sstr);
193 log->Printf ("SBSymbolContext::GetSymbol ==> SBSymbol (this = %p, '%s')", &ret_symbol, sstr.GetData());
194 }
195
196 return ret_symbol;
Chris Lattner24943d22010-06-08 16:52:24 +0000197}
198
199lldb_private::SymbolContext*
200SBSymbolContext::operator->() const
201{
Greg Clayton63094e02010-06-23 01:19:29 +0000202 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000203}
204
Greg Clayton466f6c42010-09-10 18:31:35 +0000205
206const lldb_private::SymbolContext&
207SBSymbolContext::operator*() const
208{
209 assert (m_opaque_ap.get());
210 return *m_opaque_ap.get();
211}
212
213
214lldb_private::SymbolContext&
215SBSymbolContext::operator*()
216{
217 if (m_opaque_ap.get() == NULL)
218 m_opaque_ap.reset (new SymbolContext);
219 return *m_opaque_ap.get();
220}
221
Caroline Ticee49ec182010-09-22 23:01:29 +0000222lldb_private::SymbolContext&
223SBSymbolContext::ref()
224{
225 if (m_opaque_ap.get() == NULL)
226 m_opaque_ap.reset (new SymbolContext);
227 return *m_opaque_ap.get();
228}
229
Chris Lattner24943d22010-06-08 16:52:24 +0000230lldb_private::SymbolContext *
Greg Clayton466f6c42010-09-10 18:31:35 +0000231SBSymbolContext::get() const
Chris Lattner24943d22010-06-08 16:52:24 +0000232{
Greg Clayton63094e02010-06-23 01:19:29 +0000233 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000234}
235
Caroline Tice98f930f2010-09-20 05:20:02 +0000236bool
237SBSymbolContext::GetDescription (SBStream &description)
238{
239 if (m_opaque_ap.get())
240 {
Caroline Ticee49ec182010-09-22 23:01:29 +0000241 description.ref();
Caroline Tice98f930f2010-09-20 05:20:02 +0000242 m_opaque_ap->GetDescription (description.get(), lldb::eDescriptionLevelFull, NULL);
243 }
244 else
245 description.Printf ("No value");
Chris Lattner24943d22010-06-08 16:52:24 +0000246
Caroline Tice98f930f2010-09-20 05:20:02 +0000247 return true;
248}