blob: ecd7d6677ff02fd23fe4e4ca1c52b98687489cec [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())
Caroline Ticee49ec182010-09-22 23:01:29 +000035 {
36 if (m_opaque_ap.get())
37 *m_opaque_ap = *rhs.m_opaque_ap;
38 else
39 ref() = *rhs.m_opaque_ap;
40 }
Chris Lattner24943d22010-06-08 16:52:24 +000041}
42
43SBSymbolContext::~SBSymbolContext ()
44{
45}
46
47const SBSymbolContext &
48SBSymbolContext::operator = (const SBSymbolContext &rhs)
49{
50 if (this != &rhs)
51 {
52 if (rhs.IsValid())
Greg Clayton63094e02010-06-23 01:19:29 +000053 m_opaque_ap.reset (new lldb_private::SymbolContext(*rhs.m_opaque_ap.get()));
Chris Lattner24943d22010-06-08 16:52:24 +000054 }
55 return *this;
56}
57
58void
59SBSymbolContext::SetSymbolContext (const SymbolContext *sc_ptr)
60{
61 if (sc_ptr)
62 {
Greg Clayton63094e02010-06-23 01:19:29 +000063 if (m_opaque_ap.get())
64 *m_opaque_ap = *sc_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000065 else
Greg Clayton63094e02010-06-23 01:19:29 +000066 m_opaque_ap.reset (new SymbolContext (*sc_ptr));
Chris Lattner24943d22010-06-08 16:52:24 +000067 }
68 else
69 {
Greg Clayton63094e02010-06-23 01:19:29 +000070 if (m_opaque_ap.get())
71 m_opaque_ap->Clear();
Chris Lattner24943d22010-06-08 16:52:24 +000072 }
73}
74
75bool
76SBSymbolContext::IsValid () const
77{
Greg Clayton63094e02010-06-23 01:19:29 +000078 return m_opaque_ap.get() != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000079}
80
81
82
83SBModule
84SBSymbolContext::GetModule ()
85{
86 SBModule sb_module;
Greg Clayton63094e02010-06-23 01:19:29 +000087 if (m_opaque_ap.get())
88 sb_module.SetModule(m_opaque_ap->module_sp);
Chris Lattner24943d22010-06-08 16:52:24 +000089 return sb_module;
90}
91
92SBCompileUnit
93SBSymbolContext::GetCompileUnit ()
94{
Greg Clayton63094e02010-06-23 01:19:29 +000095 return SBCompileUnit (m_opaque_ap.get() ? m_opaque_ap->comp_unit : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +000096}
97
98SBFunction
99SBSymbolContext::GetFunction ()
100{
Greg Clayton63094e02010-06-23 01:19:29 +0000101 return SBFunction (m_opaque_ap.get() ? m_opaque_ap->function : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000102}
103
104SBBlock
105SBSymbolContext::GetBlock ()
106{
Greg Clayton63094e02010-06-23 01:19:29 +0000107 return SBBlock (m_opaque_ap.get() ? m_opaque_ap->block : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000108}
109
110SBLineEntry
111SBSymbolContext::GetLineEntry ()
112{
113 SBLineEntry sb_line_entry;
Greg Clayton63094e02010-06-23 01:19:29 +0000114 if (m_opaque_ap.get())
115 sb_line_entry.SetLineEntry (m_opaque_ap->line_entry);
Chris Lattner24943d22010-06-08 16:52:24 +0000116
117 return sb_line_entry;
118}
119
120SBSymbol
121SBSymbolContext::GetSymbol ()
122{
Greg Clayton63094e02010-06-23 01:19:29 +0000123 return SBSymbol (m_opaque_ap.get() ? m_opaque_ap->symbol : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000124}
125
126lldb_private::SymbolContext*
127SBSymbolContext::operator->() const
128{
Greg Clayton63094e02010-06-23 01:19:29 +0000129 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000130}
131
Greg Clayton466f6c42010-09-10 18:31:35 +0000132
133const lldb_private::SymbolContext&
134SBSymbolContext::operator*() const
135{
136 assert (m_opaque_ap.get());
137 return *m_opaque_ap.get();
138}
139
140
141lldb_private::SymbolContext&
142SBSymbolContext::operator*()
143{
144 if (m_opaque_ap.get() == NULL)
145 m_opaque_ap.reset (new SymbolContext);
146 return *m_opaque_ap.get();
147}
148
Caroline Ticee49ec182010-09-22 23:01:29 +0000149lldb_private::SymbolContext&
150SBSymbolContext::ref()
151{
152 if (m_opaque_ap.get() == NULL)
153 m_opaque_ap.reset (new SymbolContext);
154 return *m_opaque_ap.get();
155}
156
Chris Lattner24943d22010-06-08 16:52:24 +0000157lldb_private::SymbolContext *
Greg Clayton466f6c42010-09-10 18:31:35 +0000158SBSymbolContext::get() const
Chris Lattner24943d22010-06-08 16:52:24 +0000159{
Greg Clayton63094e02010-06-23 01:19:29 +0000160 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000161}
162
Caroline Tice98f930f2010-09-20 05:20:02 +0000163bool
164SBSymbolContext::GetDescription (SBStream &description)
165{
166 if (m_opaque_ap.get())
167 {
Caroline Ticee49ec182010-09-22 23:01:29 +0000168 description.ref();
Caroline Tice98f930f2010-09-20 05:20:02 +0000169 m_opaque_ap->GetDescription (description.get(), lldb::eDescriptionLevelFull, NULL);
170 }
171 else
172 description.Printf ("No value");
Chris Lattner24943d22010-06-08 16:52:24 +0000173
Caroline Tice98f930f2010-09-20 05:20:02 +0000174 return true;
175}