SBSymbolContext.cpp revision e49ec18f1868168c8927ae30a379db176ca8cce3
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 14using namespace lldb; 15using namespace lldb_private; 16 17 18 19SBSymbolContext::SBSymbolContext () : 20 m_opaque_ap () 21{ 22} 23 24SBSymbolContext::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 31SBSymbolContext::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 43SBSymbolContext::~SBSymbolContext () 44{ 45} 46 47const SBSymbolContext & 48SBSymbolContext::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 58void 59SBSymbolContext::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 75bool 76SBSymbolContext::IsValid () const 77{ 78 return m_opaque_ap.get() != NULL; 79} 80 81 82 83SBModule 84SBSymbolContext::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 92SBCompileUnit 93SBSymbolContext::GetCompileUnit () 94{ 95 return SBCompileUnit (m_opaque_ap.get() ? m_opaque_ap->comp_unit : NULL); 96} 97 98SBFunction 99SBSymbolContext::GetFunction () 100{ 101 return SBFunction (m_opaque_ap.get() ? m_opaque_ap->function : NULL); 102} 103 104SBBlock 105SBSymbolContext::GetBlock () 106{ 107 return SBBlock (m_opaque_ap.get() ? m_opaque_ap->block : NULL); 108} 109 110SBLineEntry 111SBSymbolContext::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 120SBSymbol 121SBSymbolContext::GetSymbol () 122{ 123 return SBSymbol (m_opaque_ap.get() ? m_opaque_ap->symbol : NULL); 124} 125 126lldb_private::SymbolContext* 127SBSymbolContext::operator->() const 128{ 129 return m_opaque_ap.get(); 130} 131 132 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 149lldb_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 157lldb_private::SymbolContext * 158SBSymbolContext::get() const 159{ 160 return m_opaque_ap.get(); 161} 162 163bool 164SBSymbolContext::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