149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata//===-- SBDeclaration.cpp -----------------------------------------*- C++ -*-===// 249306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata// 349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata// The LLVM Compiler Infrastructure 449306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata// 549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata// This file is distributed under the University of Illinois Open Source 649306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata// License. See LICENSE.TXT for details. 749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata// 849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata//===----------------------------------------------------------------------===// 949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 1049306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata#include "lldb/API/SBDeclaration.h" 1149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata#include "lldb/API/SBStream.h" 1249306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata#include "lldb/Core/Log.h" 1349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata#include "lldb/Core/Stream.h" 1449306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata#include "lldb/Symbol/Declaration.h" 1549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 165e91e379b3be10738ab5aeae87b47001de16cd7cGreg Clayton#include <limits.h> 175e91e379b3be10738ab5aeae87b47001de16cd7cGreg Clayton 1849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granatausing namespace lldb; 1949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granatausing namespace lldb_private; 2049306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 2149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 2249306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::SBDeclaration () : 2349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata m_opaque_ap () 2449306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 2549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 2649306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 2749306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::SBDeclaration (const SBDeclaration &rhs) : 2849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata m_opaque_ap () 2949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 3049306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata if (rhs.IsValid()) 3149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata ref() = rhs.ref(); 3249306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 3349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 3449306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::SBDeclaration (const lldb_private::Declaration *lldb_object_ptr) : 3549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata m_opaque_ap () 3649306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 3749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata if (lldb_object_ptr) 3849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata ref() = *lldb_object_ptr; 3949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 4049306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 4149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granataconst SBDeclaration & 4249306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::operator = (const SBDeclaration &rhs) 4349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 4449306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata if (this != &rhs) 4549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata { 4649306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata if (rhs.IsValid()) 4749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata ref() = rhs.ref(); 4849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata else 4949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata m_opaque_ap.reset(); 5049306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata } 5149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata return *this; 5249306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 5349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 5449306144bb37f0b3423d992f17cdcc24703374b4Enrico Granatavoid 5549306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::SetDeclaration (const lldb_private::Declaration &lldb_object_ref) 5649306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 5749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata ref() = lldb_object_ref; 5849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 5949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 6049306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 6149306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::~SBDeclaration () 6249306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 6349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 6449306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 6549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 6649306144bb37f0b3423d992f17cdcc24703374b4Enrico Granatabool 6749306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::IsValid () const 6849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 6949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata return m_opaque_ap.get() && m_opaque_ap->IsValid(); 7049306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 7149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 7249306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 7349306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBFileSpec 7449306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::GetFileSpec () const 7549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 76952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 7749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 7849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata SBFileSpec sb_file_spec; 7949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata if (m_opaque_ap.get() && m_opaque_ap->GetFile()) 8049306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata sb_file_spec.SetFileSpec(m_opaque_ap->GetFile()); 8149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 8249306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata if (log) 8349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata { 8449306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata SBStream sstr; 8549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata sb_file_spec.GetDescription (sstr); 8649306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata log->Printf ("SBLineEntry(%p)::GetFileSpec () => SBFileSpec(%p): %s", m_opaque_ap.get(), 8749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata sb_file_spec.get(), sstr.GetData()); 8849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata } 8949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 9049306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata return sb_file_spec; 9149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 9249306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 9349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granatauint32_t 9449306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::GetLine () const 9549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 96952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 9749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 9849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata uint32_t line = 0; 9949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata if (m_opaque_ap.get()) 10049306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata line = m_opaque_ap->GetLine(); 10149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 10249306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata if (log) 10349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata log->Printf ("SBLineEntry(%p)::GetLine () => %u", m_opaque_ap.get(), line); 10449306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 10549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata return line; 10649306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 10749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 10849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 10949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granatauint32_t 11049306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::GetColumn () const 11149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 11249306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata if (m_opaque_ap.get()) 11349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata return m_opaque_ap->GetColumn(); 11449306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata return 0; 11549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 11649306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 11749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granatavoid 11849306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::SetFileSpec (lldb::SBFileSpec filespec) 11949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 12049306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata if (filespec.IsValid()) 12149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata ref().SetFile(filespec.ref()); 12249306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata else 12349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata ref().SetFile(FileSpec()); 12449306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 12549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granatavoid 12649306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::SetLine (uint32_t line) 12749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 12849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata ref().SetLine(line); 12949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 13049306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 13149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granatavoid 13249306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::SetColumn (uint32_t column) 13349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 13449306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata ref().SetColumn(column); 13549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 13649306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 13749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 13849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 13949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granatabool 14049306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::operator == (const SBDeclaration &rhs) const 14149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 14249306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata lldb_private::Declaration *lhs_ptr = m_opaque_ap.get(); 14349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata lldb_private::Declaration *rhs_ptr = rhs.m_opaque_ap.get(); 14449306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 14549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata if (lhs_ptr && rhs_ptr) 14649306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata return lldb_private::Declaration::Compare (*lhs_ptr, *rhs_ptr) == 0; 14749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 14849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata return lhs_ptr == rhs_ptr; 14949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 15049306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 15149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granatabool 15249306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::operator != (const SBDeclaration &rhs) const 15349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 15449306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata lldb_private::Declaration *lhs_ptr = m_opaque_ap.get(); 15549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata lldb_private::Declaration *rhs_ptr = rhs.m_opaque_ap.get(); 15649306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 15749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata if (lhs_ptr && rhs_ptr) 15849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata return lldb_private::Declaration::Compare (*lhs_ptr, *rhs_ptr) != 0; 15949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 16049306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata return lhs_ptr != rhs_ptr; 16149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 16249306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 16349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granataconst lldb_private::Declaration * 16449306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::operator->() const 16549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 16649306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata return m_opaque_ap.get(); 16749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 16849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 16949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granatalldb_private::Declaration & 17049306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::ref() 17149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 17249306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata if (m_opaque_ap.get() == NULL) 17349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata m_opaque_ap.reset (new lldb_private::Declaration ()); 17449306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata return *m_opaque_ap; 17549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 17649306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 17749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granataconst lldb_private::Declaration & 17849306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::ref() const 17949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 18049306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata return *m_opaque_ap; 18149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 18249306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 18349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granatabool 18449306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::GetDescription (SBStream &description) 18549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 18649306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata Stream &strm = description.ref(); 18749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 18849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata if (m_opaque_ap.get()) 18949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata { 19049306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata char file_path[PATH_MAX*2]; 19149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata m_opaque_ap->GetFile().GetPath (file_path, sizeof (file_path)); 19249306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata strm.Printf ("%s:%u", file_path, GetLine()); 19349306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata if (GetColumn() > 0) 19449306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata strm.Printf (":%u", GetColumn()); 19549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata } 19649306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata else 19749306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata strm.PutCString ("No value"); 19849306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 19949306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata return true; 20049306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 20149306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata 20249306144bb37f0b3423d992f17cdcc24703374b4Enrico Granatalldb_private::Declaration * 20349306144bb37f0b3423d992f17cdcc24703374b4Enrico GranataSBDeclaration::get () 20449306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata{ 20549306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata return m_opaque_ap.get(); 20649306144bb37f0b3423d992f17cdcc24703374b4Enrico Granata} 207