blob: 8c47f3e916c113b3b06a862ae517542c009b2b0a [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{
23}
24
25SBSymbolContext::SBSymbolContext (const SymbolContext *sc_ptr) :
Greg Clayton63094e02010-06-23 01:19:29 +000026 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000027{
Caroline Tice61ba7ec2010-10-26 23:49:36 +000028 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
Caroline Tice7826c882010-10-26 03:11:13 +000029
Chris Lattner24943d22010-06-08 16:52:24 +000030 if (sc_ptr)
Greg Clayton63094e02010-06-23 01:19:29 +000031 m_opaque_ap.reset (new SymbolContext (*sc_ptr));
Caroline Tice7826c882010-10-26 03:11:13 +000032
33 if (log)
34 {
35 SBStream sstr;
36 GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +000037 log->Printf ("SBSymbolContext::SBSymcolContext (sc_ptr=%p) => this.ap = %p (%s)",
38 sc_ptr, m_opaque_ap.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +000039 }
Chris Lattner24943d22010-06-08 16:52:24 +000040}
41
42SBSymbolContext::SBSymbolContext (const SBSymbolContext& rhs) :
Greg Clayton63094e02010-06-23 01:19:29 +000043 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000044{
Caroline Tice61ba7ec2010-10-26 23:49:36 +000045 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
Caroline Tice7826c882010-10-26 03:11:13 +000046
Caroline Tice7826c882010-10-26 03:11:13 +000047
Chris Lattner24943d22010-06-08 16:52:24 +000048 if (rhs.IsValid())
Caroline Ticee49ec182010-09-22 23:01:29 +000049 {
50 if (m_opaque_ap.get())
51 *m_opaque_ap = *rhs.m_opaque_ap;
52 else
53 ref() = *rhs.m_opaque_ap;
54 }
Caroline Tice7826c882010-10-26 03:11:13 +000055
Caroline Tice61ba7ec2010-10-26 23:49:36 +000056 if (log)
57 log->Printf ("SBSymbolContext::SBSymcolContext (rhs.ap=%p) => this.ap = %p",
58 (rhs.IsValid() ? rhs.m_opaque_ap.get() : NULL), m_opaque_ap.get());
59
Chris Lattner24943d22010-06-08 16:52:24 +000060}
61
62SBSymbolContext::~SBSymbolContext ()
63{
64}
65
66const SBSymbolContext &
67SBSymbolContext::operator = (const SBSymbolContext &rhs)
68{
69 if (this != &rhs)
70 {
71 if (rhs.IsValid())
Greg Clayton63094e02010-06-23 01:19:29 +000072 m_opaque_ap.reset (new lldb_private::SymbolContext(*rhs.m_opaque_ap.get()));
Chris Lattner24943d22010-06-08 16:52:24 +000073 }
74 return *this;
75}
76
77void
78SBSymbolContext::SetSymbolContext (const SymbolContext *sc_ptr)
79{
80 if (sc_ptr)
81 {
Greg Clayton63094e02010-06-23 01:19:29 +000082 if (m_opaque_ap.get())
83 *m_opaque_ap = *sc_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000084 else
Greg Clayton63094e02010-06-23 01:19:29 +000085 m_opaque_ap.reset (new SymbolContext (*sc_ptr));
Chris Lattner24943d22010-06-08 16:52:24 +000086 }
87 else
88 {
Greg Clayton63094e02010-06-23 01:19:29 +000089 if (m_opaque_ap.get())
90 m_opaque_ap->Clear();
Chris Lattner24943d22010-06-08 16:52:24 +000091 }
92}
93
94bool
95SBSymbolContext::IsValid () const
96{
Greg Clayton63094e02010-06-23 01:19:29 +000097 return m_opaque_ap.get() != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000098}
99
100
101
102SBModule
103SBSymbolContext::GetModule ()
104{
Caroline Tice7826c882010-10-26 03:11:13 +0000105 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
106
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000107 //if (log)
108 // log->Printf ("SBSymbolContext::GetModule ()");
Caroline Tice7826c882010-10-26 03:11:13 +0000109
Chris Lattner24943d22010-06-08 16:52:24 +0000110 SBModule sb_module;
Greg Clayton63094e02010-06-23 01:19:29 +0000111 if (m_opaque_ap.get())
112 sb_module.SetModule(m_opaque_ap->module_sp);
Caroline Tice7826c882010-10-26 03:11:13 +0000113
114 if (log)
115 {
116 SBStream sstr;
117 sb_module.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000118 log->Printf ("SBSymbolContext::GetModule (this.ap=%p) => SBModule (this.sp = %p, '%s')", m_opaque_ap.get(),
119 sb_module.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000120 }
121
Chris Lattner24943d22010-06-08 16:52:24 +0000122 return sb_module;
123}
124
125SBCompileUnit
126SBSymbolContext::GetCompileUnit ()
127{
Greg Clayton63094e02010-06-23 01:19:29 +0000128 return SBCompileUnit (m_opaque_ap.get() ? m_opaque_ap->comp_unit : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000129}
130
131SBFunction
132SBSymbolContext::GetFunction ()
133{
Caroline Tice7826c882010-10-26 03:11:13 +0000134 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
135
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000136 //if (log)
137 // log->Printf ("SBSymbolContext::GetFunction ()");
Caroline Tice7826c882010-10-26 03:11:13 +0000138
139 SBFunction ret_function (m_opaque_ap.get() ? m_opaque_ap->function : NULL);
140
141 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000142 log->Printf ("SBSymbolContext::GetFunction (this.ap=%p) => SBFunction (this.obj = %p, '%s')",
143 m_opaque_ap.get(), ret_function.get(), ret_function.GetName());
Caroline Tice7826c882010-10-26 03:11:13 +0000144
145 return ret_function;
Chris Lattner24943d22010-06-08 16:52:24 +0000146}
147
148SBBlock
149SBSymbolContext::GetBlock ()
150{
Greg Clayton63094e02010-06-23 01:19:29 +0000151 return SBBlock (m_opaque_ap.get() ? m_opaque_ap->block : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000152}
153
154SBLineEntry
155SBSymbolContext::GetLineEntry ()
156{
Caroline Tice7826c882010-10-26 03:11:13 +0000157 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
158
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000159 //if (log)
160 // log->Printf ("SBSymbolContext::GetLineEntry ()");
Caroline Tice7826c882010-10-26 03:11:13 +0000161
Chris Lattner24943d22010-06-08 16:52:24 +0000162 SBLineEntry sb_line_entry;
Greg Clayton63094e02010-06-23 01:19:29 +0000163 if (m_opaque_ap.get())
164 sb_line_entry.SetLineEntry (m_opaque_ap->line_entry);
Chris Lattner24943d22010-06-08 16:52:24 +0000165
Caroline Tice7826c882010-10-26 03:11:13 +0000166 if (log)
167 {
168 SBStream sstr;
169 sb_line_entry.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000170 log->Printf ("SBSymbolContext::GetLineEntry (this.ap=%p) => SBLineEntry (this.ap = %p, '%s')",
171 m_opaque_ap.get(),
172 sb_line_entry.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000173 }
174
Chris Lattner24943d22010-06-08 16:52:24 +0000175 return sb_line_entry;
176}
177
178SBSymbol
179SBSymbolContext::GetSymbol ()
180{
Caroline Tice7826c882010-10-26 03:11:13 +0000181 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
182
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000183 //if (log)
184 // log->Printf ("SBSymbolContext::GetSymbol ()");
Caroline Tice7826c882010-10-26 03:11:13 +0000185
186 SBSymbol ret_symbol (m_opaque_ap.get() ? m_opaque_ap->symbol : NULL);
187
188 if (log)
189 {
190 SBStream sstr;
191 ret_symbol.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000192 log->Printf ("SBSymbolContext::GetSymbol (this.ap=%p) => SBSymbol (this.ap = %p, '%s')", m_opaque_ap.get(),
193 ret_symbol.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000194 }
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}