blob: 4381994c70f153aa7b36e352a9b70aff163934fc [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"
13
14using namespace lldb;
15using namespace lldb_private;
16
17
18
19SBSymbolContext::SBSymbolContext () :
Greg Clayton63094e02010-06-23 01:19:29 +000020 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000021{
22}
23
24SBSymbolContext::SBSymbolContext (const SymbolContext *sc_ptr) :
Greg Clayton63094e02010-06-23 01:19:29 +000025 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000026{
27 if (sc_ptr)
Greg Clayton63094e02010-06-23 01:19:29 +000028 m_opaque_ap.reset (new SymbolContext (*sc_ptr));
Chris Lattner24943d22010-06-08 16:52:24 +000029}
30
31SBSymbolContext::SBSymbolContext (const SBSymbolContext& rhs) :
Greg Clayton63094e02010-06-23 01:19:29 +000032 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000033{
34 if (rhs.IsValid())
Greg Clayton63094e02010-06-23 01:19:29 +000035 *m_opaque_ap = *rhs.m_opaque_ap;
Chris Lattner24943d22010-06-08 16:52:24 +000036}
37
38SBSymbolContext::~SBSymbolContext ()
39{
40}
41
42const SBSymbolContext &
43SBSymbolContext::operator = (const SBSymbolContext &rhs)
44{
45 if (this != &rhs)
46 {
47 if (rhs.IsValid())
Greg Clayton63094e02010-06-23 01:19:29 +000048 m_opaque_ap.reset (new lldb_private::SymbolContext(*rhs.m_opaque_ap.get()));
Chris Lattner24943d22010-06-08 16:52:24 +000049 }
50 return *this;
51}
52
53void
54SBSymbolContext::SetSymbolContext (const SymbolContext *sc_ptr)
55{
56 if (sc_ptr)
57 {
Greg Clayton63094e02010-06-23 01:19:29 +000058 if (m_opaque_ap.get())
59 *m_opaque_ap = *sc_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000060 else
Greg Clayton63094e02010-06-23 01:19:29 +000061 m_opaque_ap.reset (new SymbolContext (*sc_ptr));
Chris Lattner24943d22010-06-08 16:52:24 +000062 }
63 else
64 {
Greg Clayton63094e02010-06-23 01:19:29 +000065 if (m_opaque_ap.get())
66 m_opaque_ap->Clear();
Chris Lattner24943d22010-06-08 16:52:24 +000067 }
68}
69
70bool
71SBSymbolContext::IsValid () const
72{
Greg Clayton63094e02010-06-23 01:19:29 +000073 return m_opaque_ap.get() != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000074}
75
76
77
78SBModule
79SBSymbolContext::GetModule ()
80{
81 SBModule sb_module;
Greg Clayton63094e02010-06-23 01:19:29 +000082 if (m_opaque_ap.get())
83 sb_module.SetModule(m_opaque_ap->module_sp);
Chris Lattner24943d22010-06-08 16:52:24 +000084 return sb_module;
85}
86
87SBCompileUnit
88SBSymbolContext::GetCompileUnit ()
89{
Greg Clayton63094e02010-06-23 01:19:29 +000090 return SBCompileUnit (m_opaque_ap.get() ? m_opaque_ap->comp_unit : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +000091}
92
93SBFunction
94SBSymbolContext::GetFunction ()
95{
Greg Clayton63094e02010-06-23 01:19:29 +000096 return SBFunction (m_opaque_ap.get() ? m_opaque_ap->function : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +000097}
98
99SBBlock
100SBSymbolContext::GetBlock ()
101{
Greg Clayton63094e02010-06-23 01:19:29 +0000102 return SBBlock (m_opaque_ap.get() ? m_opaque_ap->block : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000103}
104
105SBLineEntry
106SBSymbolContext::GetLineEntry ()
107{
108 SBLineEntry sb_line_entry;
Greg Clayton63094e02010-06-23 01:19:29 +0000109 if (m_opaque_ap.get())
110 sb_line_entry.SetLineEntry (m_opaque_ap->line_entry);
Chris Lattner24943d22010-06-08 16:52:24 +0000111
112 return sb_line_entry;
113}
114
115SBSymbol
116SBSymbolContext::GetSymbol ()
117{
Greg Clayton63094e02010-06-23 01:19:29 +0000118 return SBSymbol (m_opaque_ap.get() ? m_opaque_ap->symbol : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000119}
120
121lldb_private::SymbolContext*
122SBSymbolContext::operator->() const
123{
Greg Clayton63094e02010-06-23 01:19:29 +0000124 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000125}
126
Greg Clayton466f6c42010-09-10 18:31:35 +0000127
128const lldb_private::SymbolContext&
129SBSymbolContext::operator*() const
130{
131 assert (m_opaque_ap.get());
132 return *m_opaque_ap.get();
133}
134
135
136lldb_private::SymbolContext&
137SBSymbolContext::operator*()
138{
139 if (m_opaque_ap.get() == NULL)
140 m_opaque_ap.reset (new SymbolContext);
141 return *m_opaque_ap.get();
142}
143
Chris Lattner24943d22010-06-08 16:52:24 +0000144lldb_private::SymbolContext *
Greg Clayton466f6c42010-09-10 18:31:35 +0000145SBSymbolContext::get() const
Chris Lattner24943d22010-06-08 16:52:24 +0000146{
Greg Clayton63094e02010-06-23 01:19:29 +0000147 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000148}
149
Caroline Tice98f930f2010-09-20 05:20:02 +0000150bool
151SBSymbolContext::GetDescription (SBStream &description)
152{
153 if (m_opaque_ap.get())
154 {
155 m_opaque_ap->GetDescription (description.get(), lldb::eDescriptionLevelFull, NULL);
156 }
157 else
158 description.Printf ("No value");
Chris Lattner24943d22010-06-08 16:52:24 +0000159
Caroline Tice98f930f2010-09-20 05:20:02 +0000160 return true;
161}
Chris Lattner24943d22010-06-08 16:52:24 +0000162
Caroline Tice98f930f2010-09-20 05:20:02 +0000163PyObject *
164SBSymbolContext::__repr__ ()
165{
166 SBStream description;
167 description.ref();
168 GetDescription (description);
169 return PyString_FromString (description.GetData());
170}