1 //===-- 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"
11 #include "lldb/API/SBStream.h"
12 #include "lldb/Symbol/SymbolContext.h"
13 
14 using namespace lldb;
15 using namespace lldb_private;
16 
17 
18 
19 SBSymbolContext::SBSymbolContext () :
20     m_opaque_ap ()
21 {
22 }
23 
24 SBSymbolContext::SBSymbolContext (const SymbolContext *sc_ptr) :
25     m_opaque_ap ()
26 {
27     if (sc_ptr)
28         m_opaque_ap.reset (new SymbolContext (*sc_ptr));
29 }
30 
31 SBSymbolContext::SBSymbolContext (const SBSymbolContext& rhs) :
32     m_opaque_ap ()
33 {
34     if (rhs.IsValid())
35     {
36         if (m_opaque_ap.get())
37             *m_opaque_ap = *rhs.m_opaque_ap;
38         else
39             ref() = *rhs.m_opaque_ap;
40     }
41 }
42 
43 SBSymbolContext::~SBSymbolContext ()
44 {
45 }
46 
47 const SBSymbolContext &
48 SBSymbolContext::operator = (const SBSymbolContext &rhs)
49 {
50     if (this != &rhs)
51     {
52         if (rhs.IsValid())
53             m_opaque_ap.reset (new lldb_private::SymbolContext(*rhs.m_opaque_ap.get()));
54     }
55     return *this;
56 }
57 
58 void
59 SBSymbolContext::SetSymbolContext (const SymbolContext *sc_ptr)
60 {
61     if (sc_ptr)
62     {
63         if (m_opaque_ap.get())
64             *m_opaque_ap = *sc_ptr;
65         else
66             m_opaque_ap.reset (new SymbolContext (*sc_ptr));
67     }
68     else
69     {
70         if (m_opaque_ap.get())
71             m_opaque_ap->Clear();
72     }
73 }
74 
75 bool
76 SBSymbolContext::IsValid () const
77 {
78     return m_opaque_ap.get() != NULL;
79 }
80 
81 
82 
83 SBModule
84 SBSymbolContext::GetModule ()
85 {
86     SBModule sb_module;
87     if (m_opaque_ap.get())
88         sb_module.SetModule(m_opaque_ap->module_sp);
89     return sb_module;
90 }
91 
92 SBCompileUnit
93 SBSymbolContext::GetCompileUnit ()
94 {
95     return SBCompileUnit (m_opaque_ap.get() ? m_opaque_ap->comp_unit : NULL);
96 }
97 
98 SBFunction
99 SBSymbolContext::GetFunction ()
100 {
101     return SBFunction (m_opaque_ap.get() ? m_opaque_ap->function : NULL);
102 }
103 
104 SBBlock
105 SBSymbolContext::GetBlock ()
106 {
107     return SBBlock (m_opaque_ap.get() ? m_opaque_ap->block : NULL);
108 }
109 
110 SBLineEntry
111 SBSymbolContext::GetLineEntry ()
112 {
113     SBLineEntry sb_line_entry;
114     if (m_opaque_ap.get())
115         sb_line_entry.SetLineEntry (m_opaque_ap->line_entry);
116 
117     return sb_line_entry;
118 }
119 
120 SBSymbol
121 SBSymbolContext::GetSymbol ()
122 {
123     return SBSymbol (m_opaque_ap.get() ? m_opaque_ap->symbol : NULL);
124 }
125 
126 lldb_private::SymbolContext*
127 SBSymbolContext::operator->() const
128 {
129     return m_opaque_ap.get();
130 }
131 
132 
133 const lldb_private::SymbolContext&
134 SBSymbolContext::operator*() const
135 {
136     assert (m_opaque_ap.get());
137     return *m_opaque_ap.get();
138 }
139 
140 
141 lldb_private::SymbolContext&
142 SBSymbolContext::operator*()
143 {
144     if (m_opaque_ap.get() == NULL)
145         m_opaque_ap.reset (new SymbolContext);
146     return *m_opaque_ap.get();
147 }
148 
149 lldb_private::SymbolContext&
150 SBSymbolContext::ref()
151 {
152     if (m_opaque_ap.get() == NULL)
153         m_opaque_ap.reset (new SymbolContext);
154     return *m_opaque_ap.get();
155 }
156 
157 lldb_private::SymbolContext *
158 SBSymbolContext::get() const
159 {
160     return m_opaque_ap.get();
161 }
162 
163 bool
164 SBSymbolContext::GetDescription (SBStream &description)
165 {
166     if (m_opaque_ap.get())
167     {
168         description.ref();
169         m_opaque_ap->GetDescription (description.get(), lldb::eDescriptionLevelFull, NULL);
170     }
171     else
172         description.Printf ("No value");
173 
174     return true;
175 }
176