blob: 3b0b5fc0e611c63c930f4d85822a3426a0b8df25 [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{
28 if (sc_ptr)
Greg Clayton63094e02010-06-23 01:19:29 +000029 m_opaque_ap.reset (new SymbolContext (*sc_ptr));
Chris Lattner24943d22010-06-08 16:52:24 +000030}
31
32SBSymbolContext::SBSymbolContext (const SBSymbolContext& rhs) :
Greg Clayton63094e02010-06-23 01:19:29 +000033 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000034{
35 if (rhs.IsValid())
Caroline Ticee49ec182010-09-22 23:01:29 +000036 {
37 if (m_opaque_ap.get())
38 *m_opaque_ap = *rhs.m_opaque_ap;
39 else
40 ref() = *rhs.m_opaque_ap;
41 }
Chris Lattner24943d22010-06-08 16:52:24 +000042}
43
44SBSymbolContext::~SBSymbolContext ()
45{
46}
47
48const SBSymbolContext &
49SBSymbolContext::operator = (const SBSymbolContext &rhs)
50{
51 if (this != &rhs)
52 {
53 if (rhs.IsValid())
Greg Clayton63094e02010-06-23 01:19:29 +000054 m_opaque_ap.reset (new lldb_private::SymbolContext(*rhs.m_opaque_ap.get()));
Chris Lattner24943d22010-06-08 16:52:24 +000055 }
56 return *this;
57}
58
59void
60SBSymbolContext::SetSymbolContext (const SymbolContext *sc_ptr)
61{
62 if (sc_ptr)
63 {
Greg Clayton63094e02010-06-23 01:19:29 +000064 if (m_opaque_ap.get())
65 *m_opaque_ap = *sc_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000066 else
Greg Clayton63094e02010-06-23 01:19:29 +000067 m_opaque_ap.reset (new SymbolContext (*sc_ptr));
Chris Lattner24943d22010-06-08 16:52:24 +000068 }
69 else
70 {
Greg Clayton63094e02010-06-23 01:19:29 +000071 if (m_opaque_ap.get())
72 m_opaque_ap->Clear();
Chris Lattner24943d22010-06-08 16:52:24 +000073 }
74}
75
76bool
77SBSymbolContext::IsValid () const
78{
Greg Clayton63094e02010-06-23 01:19:29 +000079 return m_opaque_ap.get() != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000080}
81
82
83
84SBModule
85SBSymbolContext::GetModule ()
86{
Caroline Tice7826c882010-10-26 03:11:13 +000087 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
88
Chris Lattner24943d22010-06-08 16:52:24 +000089 SBModule sb_module;
Greg Clayton63094e02010-06-23 01:19:29 +000090 if (m_opaque_ap.get())
91 sb_module.SetModule(m_opaque_ap->module_sp);
Caroline Tice7826c882010-10-26 03:11:13 +000092
93 if (log)
94 {
95 SBStream sstr;
96 sb_module.GetDescription (sstr);
Greg Claytona66ba462010-10-30 04:51:46 +000097 log->Printf ("SBSymbolContext(%p)::GetModule () => SBModule(%p): %s",
98 m_opaque_ap.get(), sb_module.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +000099 }
100
Chris Lattner24943d22010-06-08 16:52:24 +0000101 return sb_module;
102}
103
104SBCompileUnit
105SBSymbolContext::GetCompileUnit ()
106{
Greg Clayton63094e02010-06-23 01:19:29 +0000107 return SBCompileUnit (m_opaque_ap.get() ? m_opaque_ap->comp_unit : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000108}
109
110SBFunction
111SBSymbolContext::GetFunction ()
112{
Caroline Tice7826c882010-10-26 03:11:13 +0000113 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
114
Caroline Tice7826c882010-10-26 03:11:13 +0000115 SBFunction ret_function (m_opaque_ap.get() ? m_opaque_ap->function : NULL);
116
117 if (log)
Greg Claytona66ba462010-10-30 04:51:46 +0000118 log->Printf ("SBSymbolContext(%p)::GetFunction () => SBFunction(%p): %s",
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000119 m_opaque_ap.get(), ret_function.get(), ret_function.GetName());
Caroline Tice7826c882010-10-26 03:11:13 +0000120
121 return ret_function;
Chris Lattner24943d22010-06-08 16:52:24 +0000122}
123
124SBBlock
125SBSymbolContext::GetBlock ()
126{
Greg Clayton63094e02010-06-23 01:19:29 +0000127 return SBBlock (m_opaque_ap.get() ? m_opaque_ap->block : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000128}
129
130SBLineEntry
131SBSymbolContext::GetLineEntry ()
132{
Caroline Tice7826c882010-10-26 03:11:13 +0000133 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
134
Chris Lattner24943d22010-06-08 16:52:24 +0000135 SBLineEntry sb_line_entry;
Greg Clayton63094e02010-06-23 01:19:29 +0000136 if (m_opaque_ap.get())
137 sb_line_entry.SetLineEntry (m_opaque_ap->line_entry);
Chris Lattner24943d22010-06-08 16:52:24 +0000138
Caroline Tice7826c882010-10-26 03:11:13 +0000139 if (log)
140 {
141 SBStream sstr;
142 sb_line_entry.GetDescription (sstr);
Greg Claytona66ba462010-10-30 04:51:46 +0000143 log->Printf ("SBSymbolContext(%p)::GetLineEntry () => SBLineEntry(%p): %s",
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000144 m_opaque_ap.get(),
145 sb_line_entry.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000146 }
147
Chris Lattner24943d22010-06-08 16:52:24 +0000148 return sb_line_entry;
149}
150
151SBSymbol
152SBSymbolContext::GetSymbol ()
153{
Caroline Tice7826c882010-10-26 03:11:13 +0000154 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
155
Caroline Tice7826c882010-10-26 03:11:13 +0000156 SBSymbol ret_symbol (m_opaque_ap.get() ? m_opaque_ap->symbol : NULL);
157
158 if (log)
159 {
160 SBStream sstr;
161 ret_symbol.GetDescription (sstr);
Greg Claytona66ba462010-10-30 04:51:46 +0000162 log->Printf ("SBSymbolContext(%p)::GetSymbol () => SBSymbol(%p): %s", m_opaque_ap.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000163 ret_symbol.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000164 }
165
166 return ret_symbol;
Chris Lattner24943d22010-06-08 16:52:24 +0000167}
168
169lldb_private::SymbolContext*
170SBSymbolContext::operator->() const
171{
Greg Clayton63094e02010-06-23 01:19:29 +0000172 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000173}
174
Greg Clayton466f6c42010-09-10 18:31:35 +0000175
176const lldb_private::SymbolContext&
177SBSymbolContext::operator*() const
178{
179 assert (m_opaque_ap.get());
180 return *m_opaque_ap.get();
181}
182
183
184lldb_private::SymbolContext&
185SBSymbolContext::operator*()
186{
187 if (m_opaque_ap.get() == NULL)
188 m_opaque_ap.reset (new SymbolContext);
189 return *m_opaque_ap.get();
190}
191
Caroline Ticee49ec182010-09-22 23:01:29 +0000192lldb_private::SymbolContext&
193SBSymbolContext::ref()
194{
195 if (m_opaque_ap.get() == NULL)
196 m_opaque_ap.reset (new SymbolContext);
197 return *m_opaque_ap.get();
198}
199
Chris Lattner24943d22010-06-08 16:52:24 +0000200lldb_private::SymbolContext *
Greg Clayton466f6c42010-09-10 18:31:35 +0000201SBSymbolContext::get() const
Chris Lattner24943d22010-06-08 16:52:24 +0000202{
Greg Clayton63094e02010-06-23 01:19:29 +0000203 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000204}
205
Caroline Tice98f930f2010-09-20 05:20:02 +0000206bool
207SBSymbolContext::GetDescription (SBStream &description)
208{
209 if (m_opaque_ap.get())
210 {
Caroline Ticee49ec182010-09-22 23:01:29 +0000211 description.ref();
Caroline Tice98f930f2010-09-20 05:20:02 +0000212 m_opaque_ap->GetDescription (description.get(), lldb::eDescriptionLevelFull, NULL);
213 }
214 else
215 description.Printf ("No value");
Chris Lattner24943d22010-06-08 16:52:24 +0000216
Caroline Tice98f930f2010-09-20 05:20:02 +0000217 return true;
218}