1*10de0904SEnrico Granata //===-- SBDeclaration.cpp -----------------------------------------*- C++ -*-===// 2*10de0904SEnrico Granata // 3*10de0904SEnrico Granata // The LLVM Compiler Infrastructure 4*10de0904SEnrico Granata // 5*10de0904SEnrico Granata // This file is distributed under the University of Illinois Open Source 6*10de0904SEnrico Granata // License. See LICENSE.TXT for details. 7*10de0904SEnrico Granata // 8*10de0904SEnrico Granata //===----------------------------------------------------------------------===// 9*10de0904SEnrico Granata 10*10de0904SEnrico Granata #include "lldb/API/SBDeclaration.h" 11*10de0904SEnrico Granata #include "lldb/API/SBStream.h" 12*10de0904SEnrico Granata #include "lldb/Core/Log.h" 13*10de0904SEnrico Granata #include "lldb/Core/Stream.h" 14*10de0904SEnrico Granata #include "lldb/Symbol/Declaration.h" 15*10de0904SEnrico Granata 16*10de0904SEnrico Granata using namespace lldb; 17*10de0904SEnrico Granata using namespace lldb_private; 18*10de0904SEnrico Granata 19*10de0904SEnrico Granata 20*10de0904SEnrico Granata SBDeclaration::SBDeclaration () : 21*10de0904SEnrico Granata m_opaque_ap () 22*10de0904SEnrico Granata { 23*10de0904SEnrico Granata } 24*10de0904SEnrico Granata 25*10de0904SEnrico Granata SBDeclaration::SBDeclaration (const SBDeclaration &rhs) : 26*10de0904SEnrico Granata m_opaque_ap () 27*10de0904SEnrico Granata { 28*10de0904SEnrico Granata if (rhs.IsValid()) 29*10de0904SEnrico Granata ref() = rhs.ref(); 30*10de0904SEnrico Granata } 31*10de0904SEnrico Granata 32*10de0904SEnrico Granata SBDeclaration::SBDeclaration (const lldb_private::Declaration *lldb_object_ptr) : 33*10de0904SEnrico Granata m_opaque_ap () 34*10de0904SEnrico Granata { 35*10de0904SEnrico Granata if (lldb_object_ptr) 36*10de0904SEnrico Granata ref() = *lldb_object_ptr; 37*10de0904SEnrico Granata } 38*10de0904SEnrico Granata 39*10de0904SEnrico Granata const SBDeclaration & 40*10de0904SEnrico Granata SBDeclaration::operator = (const SBDeclaration &rhs) 41*10de0904SEnrico Granata { 42*10de0904SEnrico Granata if (this != &rhs) 43*10de0904SEnrico Granata { 44*10de0904SEnrico Granata if (rhs.IsValid()) 45*10de0904SEnrico Granata ref() = rhs.ref(); 46*10de0904SEnrico Granata else 47*10de0904SEnrico Granata m_opaque_ap.reset(); 48*10de0904SEnrico Granata } 49*10de0904SEnrico Granata return *this; 50*10de0904SEnrico Granata } 51*10de0904SEnrico Granata 52*10de0904SEnrico Granata void 53*10de0904SEnrico Granata SBDeclaration::SetDeclaration (const lldb_private::Declaration &lldb_object_ref) 54*10de0904SEnrico Granata { 55*10de0904SEnrico Granata ref() = lldb_object_ref; 56*10de0904SEnrico Granata } 57*10de0904SEnrico Granata 58*10de0904SEnrico Granata 59*10de0904SEnrico Granata SBDeclaration::~SBDeclaration () 60*10de0904SEnrico Granata { 61*10de0904SEnrico Granata } 62*10de0904SEnrico Granata 63*10de0904SEnrico Granata 64*10de0904SEnrico Granata bool 65*10de0904SEnrico Granata SBDeclaration::IsValid () const 66*10de0904SEnrico Granata { 67*10de0904SEnrico Granata return m_opaque_ap.get() && m_opaque_ap->IsValid(); 68*10de0904SEnrico Granata } 69*10de0904SEnrico Granata 70*10de0904SEnrico Granata 71*10de0904SEnrico Granata SBFileSpec 72*10de0904SEnrico Granata SBDeclaration::GetFileSpec () const 73*10de0904SEnrico Granata { 74*10de0904SEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 75*10de0904SEnrico Granata 76*10de0904SEnrico Granata SBFileSpec sb_file_spec; 77*10de0904SEnrico Granata if (m_opaque_ap.get() && m_opaque_ap->GetFile()) 78*10de0904SEnrico Granata sb_file_spec.SetFileSpec(m_opaque_ap->GetFile()); 79*10de0904SEnrico Granata 80*10de0904SEnrico Granata if (log) 81*10de0904SEnrico Granata { 82*10de0904SEnrico Granata SBStream sstr; 83*10de0904SEnrico Granata sb_file_spec.GetDescription (sstr); 84*10de0904SEnrico Granata log->Printf ("SBLineEntry(%p)::GetFileSpec () => SBFileSpec(%p): %s", m_opaque_ap.get(), 85*10de0904SEnrico Granata sb_file_spec.get(), sstr.GetData()); 86*10de0904SEnrico Granata } 87*10de0904SEnrico Granata 88*10de0904SEnrico Granata return sb_file_spec; 89*10de0904SEnrico Granata } 90*10de0904SEnrico Granata 91*10de0904SEnrico Granata uint32_t 92*10de0904SEnrico Granata SBDeclaration::GetLine () const 93*10de0904SEnrico Granata { 94*10de0904SEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 95*10de0904SEnrico Granata 96*10de0904SEnrico Granata uint32_t line = 0; 97*10de0904SEnrico Granata if (m_opaque_ap.get()) 98*10de0904SEnrico Granata line = m_opaque_ap->GetLine(); 99*10de0904SEnrico Granata 100*10de0904SEnrico Granata if (log) 101*10de0904SEnrico Granata log->Printf ("SBLineEntry(%p)::GetLine () => %u", m_opaque_ap.get(), line); 102*10de0904SEnrico Granata 103*10de0904SEnrico Granata return line; 104*10de0904SEnrico Granata } 105*10de0904SEnrico Granata 106*10de0904SEnrico Granata 107*10de0904SEnrico Granata uint32_t 108*10de0904SEnrico Granata SBDeclaration::GetColumn () const 109*10de0904SEnrico Granata { 110*10de0904SEnrico Granata if (m_opaque_ap.get()) 111*10de0904SEnrico Granata return m_opaque_ap->GetColumn(); 112*10de0904SEnrico Granata return 0; 113*10de0904SEnrico Granata } 114*10de0904SEnrico Granata 115*10de0904SEnrico Granata void 116*10de0904SEnrico Granata SBDeclaration::SetFileSpec (lldb::SBFileSpec filespec) 117*10de0904SEnrico Granata { 118*10de0904SEnrico Granata if (filespec.IsValid()) 119*10de0904SEnrico Granata ref().SetFile(filespec.ref()); 120*10de0904SEnrico Granata else 121*10de0904SEnrico Granata ref().SetFile(FileSpec()); 122*10de0904SEnrico Granata } 123*10de0904SEnrico Granata void 124*10de0904SEnrico Granata SBDeclaration::SetLine (uint32_t line) 125*10de0904SEnrico Granata { 126*10de0904SEnrico Granata ref().SetLine(line); 127*10de0904SEnrico Granata } 128*10de0904SEnrico Granata 129*10de0904SEnrico Granata void 130*10de0904SEnrico Granata SBDeclaration::SetColumn (uint32_t column) 131*10de0904SEnrico Granata { 132*10de0904SEnrico Granata ref().SetColumn(column); 133*10de0904SEnrico Granata } 134*10de0904SEnrico Granata 135*10de0904SEnrico Granata 136*10de0904SEnrico Granata 137*10de0904SEnrico Granata bool 138*10de0904SEnrico Granata SBDeclaration::operator == (const SBDeclaration &rhs) const 139*10de0904SEnrico Granata { 140*10de0904SEnrico Granata lldb_private::Declaration *lhs_ptr = m_opaque_ap.get(); 141*10de0904SEnrico Granata lldb_private::Declaration *rhs_ptr = rhs.m_opaque_ap.get(); 142*10de0904SEnrico Granata 143*10de0904SEnrico Granata if (lhs_ptr && rhs_ptr) 144*10de0904SEnrico Granata return lldb_private::Declaration::Compare (*lhs_ptr, *rhs_ptr) == 0; 145*10de0904SEnrico Granata 146*10de0904SEnrico Granata return lhs_ptr == rhs_ptr; 147*10de0904SEnrico Granata } 148*10de0904SEnrico Granata 149*10de0904SEnrico Granata bool 150*10de0904SEnrico Granata SBDeclaration::operator != (const SBDeclaration &rhs) const 151*10de0904SEnrico Granata { 152*10de0904SEnrico Granata lldb_private::Declaration *lhs_ptr = m_opaque_ap.get(); 153*10de0904SEnrico Granata lldb_private::Declaration *rhs_ptr = rhs.m_opaque_ap.get(); 154*10de0904SEnrico Granata 155*10de0904SEnrico Granata if (lhs_ptr && rhs_ptr) 156*10de0904SEnrico Granata return lldb_private::Declaration::Compare (*lhs_ptr, *rhs_ptr) != 0; 157*10de0904SEnrico Granata 158*10de0904SEnrico Granata return lhs_ptr != rhs_ptr; 159*10de0904SEnrico Granata } 160*10de0904SEnrico Granata 161*10de0904SEnrico Granata const lldb_private::Declaration * 162*10de0904SEnrico Granata SBDeclaration::operator->() const 163*10de0904SEnrico Granata { 164*10de0904SEnrico Granata return m_opaque_ap.get(); 165*10de0904SEnrico Granata } 166*10de0904SEnrico Granata 167*10de0904SEnrico Granata lldb_private::Declaration & 168*10de0904SEnrico Granata SBDeclaration::ref() 169*10de0904SEnrico Granata { 170*10de0904SEnrico Granata if (m_opaque_ap.get() == NULL) 171*10de0904SEnrico Granata m_opaque_ap.reset (new lldb_private::Declaration ()); 172*10de0904SEnrico Granata return *m_opaque_ap; 173*10de0904SEnrico Granata } 174*10de0904SEnrico Granata 175*10de0904SEnrico Granata const lldb_private::Declaration & 176*10de0904SEnrico Granata SBDeclaration::ref() const 177*10de0904SEnrico Granata { 178*10de0904SEnrico Granata return *m_opaque_ap; 179*10de0904SEnrico Granata } 180*10de0904SEnrico Granata 181*10de0904SEnrico Granata bool 182*10de0904SEnrico Granata SBDeclaration::GetDescription (SBStream &description) 183*10de0904SEnrico Granata { 184*10de0904SEnrico Granata Stream &strm = description.ref(); 185*10de0904SEnrico Granata 186*10de0904SEnrico Granata if (m_opaque_ap.get()) 187*10de0904SEnrico Granata { 188*10de0904SEnrico Granata char file_path[PATH_MAX*2]; 189*10de0904SEnrico Granata m_opaque_ap->GetFile().GetPath (file_path, sizeof (file_path)); 190*10de0904SEnrico Granata strm.Printf ("%s:%u", file_path, GetLine()); 191*10de0904SEnrico Granata if (GetColumn() > 0) 192*10de0904SEnrico Granata strm.Printf (":%u", GetColumn()); 193*10de0904SEnrico Granata } 194*10de0904SEnrico Granata else 195*10de0904SEnrico Granata strm.PutCString ("No value"); 196*10de0904SEnrico Granata 197*10de0904SEnrico Granata return true; 198*10de0904SEnrico Granata } 199*10de0904SEnrico Granata 200*10de0904SEnrico Granata lldb_private::Declaration * 201*10de0904SEnrico Granata SBDeclaration::get () 202*10de0904SEnrico Granata { 203*10de0904SEnrico Granata return m_opaque_ap.get(); 204*10de0904SEnrico Granata } 205