blob: 1c2b52c6a7da0cd01a152d8091c39e78814b4cbe [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"
11#include "lldb/Symbol/SymbolContext.h"
12
13using namespace lldb;
14using namespace lldb_private;
15
16
17
18SBSymbolContext::SBSymbolContext () :
Greg Clayton63094e02010-06-23 01:19:29 +000019 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000020{
21}
22
23SBSymbolContext::SBSymbolContext (const SymbolContext *sc_ptr) :
Greg Clayton63094e02010-06-23 01:19:29 +000024 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000025{
26 if (sc_ptr)
Greg Clayton63094e02010-06-23 01:19:29 +000027 m_opaque_ap.reset (new SymbolContext (*sc_ptr));
Chris Lattner24943d22010-06-08 16:52:24 +000028}
29
30SBSymbolContext::SBSymbolContext (const SBSymbolContext& rhs) :
Greg Clayton63094e02010-06-23 01:19:29 +000031 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000032{
33 if (rhs.IsValid())
Greg Clayton63094e02010-06-23 01:19:29 +000034 *m_opaque_ap = *rhs.m_opaque_ap;
Chris Lattner24943d22010-06-08 16:52:24 +000035}
36
37SBSymbolContext::~SBSymbolContext ()
38{
39}
40
41const SBSymbolContext &
42SBSymbolContext::operator = (const SBSymbolContext &rhs)
43{
44 if (this != &rhs)
45 {
46 if (rhs.IsValid())
Greg Clayton63094e02010-06-23 01:19:29 +000047 m_opaque_ap.reset (new lldb_private::SymbolContext(*rhs.m_opaque_ap.get()));
Chris Lattner24943d22010-06-08 16:52:24 +000048 }
49 return *this;
50}
51
52void
53SBSymbolContext::SetSymbolContext (const SymbolContext *sc_ptr)
54{
55 if (sc_ptr)
56 {
Greg Clayton63094e02010-06-23 01:19:29 +000057 if (m_opaque_ap.get())
58 *m_opaque_ap = *sc_ptr;
Chris Lattner24943d22010-06-08 16:52:24 +000059 else
Greg Clayton63094e02010-06-23 01:19:29 +000060 m_opaque_ap.reset (new SymbolContext (*sc_ptr));
Chris Lattner24943d22010-06-08 16:52:24 +000061 }
62 else
63 {
Greg Clayton63094e02010-06-23 01:19:29 +000064 if (m_opaque_ap.get())
65 m_opaque_ap->Clear();
Chris Lattner24943d22010-06-08 16:52:24 +000066 }
67}
68
69bool
70SBSymbolContext::IsValid () const
71{
Greg Clayton63094e02010-06-23 01:19:29 +000072 return m_opaque_ap.get() != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000073}
74
75
76
77SBModule
78SBSymbolContext::GetModule ()
79{
80 SBModule sb_module;
Greg Clayton63094e02010-06-23 01:19:29 +000081 if (m_opaque_ap.get())
82 sb_module.SetModule(m_opaque_ap->module_sp);
Chris Lattner24943d22010-06-08 16:52:24 +000083 return sb_module;
84}
85
86SBCompileUnit
87SBSymbolContext::GetCompileUnit ()
88{
Greg Clayton63094e02010-06-23 01:19:29 +000089 return SBCompileUnit (m_opaque_ap.get() ? m_opaque_ap->comp_unit : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +000090}
91
92SBFunction
93SBSymbolContext::GetFunction ()
94{
Greg Clayton63094e02010-06-23 01:19:29 +000095 return SBFunction (m_opaque_ap.get() ? m_opaque_ap->function : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +000096}
97
98SBBlock
99SBSymbolContext::GetBlock ()
100{
Greg Clayton63094e02010-06-23 01:19:29 +0000101 return SBBlock (m_opaque_ap.get() ? m_opaque_ap->block : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000102}
103
104SBLineEntry
105SBSymbolContext::GetLineEntry ()
106{
107 SBLineEntry sb_line_entry;
Greg Clayton63094e02010-06-23 01:19:29 +0000108 if (m_opaque_ap.get())
109 sb_line_entry.SetLineEntry (m_opaque_ap->line_entry);
Chris Lattner24943d22010-06-08 16:52:24 +0000110
111 return sb_line_entry;
112}
113
114SBSymbol
115SBSymbolContext::GetSymbol ()
116{
Greg Clayton63094e02010-06-23 01:19:29 +0000117 return SBSymbol (m_opaque_ap.get() ? m_opaque_ap->symbol : NULL);
Chris Lattner24943d22010-06-08 16:52:24 +0000118}
119
120lldb_private::SymbolContext*
121SBSymbolContext::operator->() const
122{
Greg Clayton63094e02010-06-23 01:19:29 +0000123 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000124}
125
Greg Clayton466f6c42010-09-10 18:31:35 +0000126
127const lldb_private::SymbolContext&
128SBSymbolContext::operator*() const
129{
130 assert (m_opaque_ap.get());
131 return *m_opaque_ap.get();
132}
133
134
135lldb_private::SymbolContext&
136SBSymbolContext::operator*()
137{
138 if (m_opaque_ap.get() == NULL)
139 m_opaque_ap.reset (new SymbolContext);
140 return *m_opaque_ap.get();
141}
142
Chris Lattner24943d22010-06-08 16:52:24 +0000143lldb_private::SymbolContext *
Greg Clayton466f6c42010-09-10 18:31:35 +0000144SBSymbolContext::get() const
Chris Lattner24943d22010-06-08 16:52:24 +0000145{
Greg Clayton63094e02010-06-23 01:19:29 +0000146 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000147}
148
149
150