130fdc8d8SChris Lattner //===-- SBLineEntry.cpp -----------------------------------------*- C++ -*-===// 230fdc8d8SChris Lattner // 330fdc8d8SChris Lattner // The LLVM Compiler Infrastructure 430fdc8d8SChris Lattner // 530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source 630fdc8d8SChris Lattner // License. See LICENSE.TXT for details. 730fdc8d8SChris Lattner // 830fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 930fdc8d8SChris Lattner 1030fdc8d8SChris Lattner #include "lldb/API/SBLineEntry.h" 1130fdc8d8SChris Lattner #include "lldb/Symbol/LineEntry.h" 1230fdc8d8SChris Lattner 1330fdc8d8SChris Lattner using namespace lldb; 1430fdc8d8SChris Lattner 1530fdc8d8SChris Lattner 1630fdc8d8SChris Lattner SBLineEntry::SBLineEntry () : 17*6611103cSGreg Clayton m_opaque_ap () 1830fdc8d8SChris Lattner { 1930fdc8d8SChris Lattner } 2030fdc8d8SChris Lattner 2130fdc8d8SChris Lattner SBLineEntry::SBLineEntry (const SBLineEntry &rhs) : 22*6611103cSGreg Clayton m_opaque_ap () 2330fdc8d8SChris Lattner { 2430fdc8d8SChris Lattner if (rhs.IsValid()) 2530fdc8d8SChris Lattner { 26*6611103cSGreg Clayton m_opaque_ap.reset (new lldb_private::LineEntry (*rhs)); 2730fdc8d8SChris Lattner } 2830fdc8d8SChris Lattner } 2930fdc8d8SChris Lattner 3030fdc8d8SChris Lattner 3130fdc8d8SChris Lattner 3230fdc8d8SChris Lattner SBLineEntry::SBLineEntry (const lldb_private::LineEntry *lldb_object_ptr) : 33*6611103cSGreg Clayton m_opaque_ap () 3430fdc8d8SChris Lattner { 3530fdc8d8SChris Lattner if (lldb_object_ptr) 36*6611103cSGreg Clayton m_opaque_ap.reset (new lldb_private::LineEntry(*lldb_object_ptr)); 3730fdc8d8SChris Lattner } 3830fdc8d8SChris Lattner 3930fdc8d8SChris Lattner const SBLineEntry & 4030fdc8d8SChris Lattner SBLineEntry::operator = (const SBLineEntry &rhs) 4130fdc8d8SChris Lattner { 4230fdc8d8SChris Lattner if (this != &rhs) 4330fdc8d8SChris Lattner { 4430fdc8d8SChris Lattner if (rhs.IsValid()) 45*6611103cSGreg Clayton m_opaque_ap.reset (new lldb_private::LineEntry(*rhs)); 4630fdc8d8SChris Lattner } 4730fdc8d8SChris Lattner return *this; 4830fdc8d8SChris Lattner } 4930fdc8d8SChris Lattner 5030fdc8d8SChris Lattner void 5130fdc8d8SChris Lattner SBLineEntry::SetLineEntry (const lldb_private::LineEntry &lldb_object_ref) 5230fdc8d8SChris Lattner { 53*6611103cSGreg Clayton if (m_opaque_ap.get()) 54*6611103cSGreg Clayton (*m_opaque_ap.get()) = lldb_object_ref; 5530fdc8d8SChris Lattner else 56*6611103cSGreg Clayton m_opaque_ap.reset (new lldb_private::LineEntry (lldb_object_ref)); 5730fdc8d8SChris Lattner } 5830fdc8d8SChris Lattner 5930fdc8d8SChris Lattner 6030fdc8d8SChris Lattner SBLineEntry::~SBLineEntry () 6130fdc8d8SChris Lattner { 6230fdc8d8SChris Lattner } 6330fdc8d8SChris Lattner 6430fdc8d8SChris Lattner 6530fdc8d8SChris Lattner SBAddress 6630fdc8d8SChris Lattner SBLineEntry::GetStartAddress () const 6730fdc8d8SChris Lattner { 6830fdc8d8SChris Lattner SBAddress sb_address; 69*6611103cSGreg Clayton if (m_opaque_ap.get()) 70*6611103cSGreg Clayton sb_address.SetAddress(&m_opaque_ap->range.GetBaseAddress()); 7130fdc8d8SChris Lattner return sb_address; 7230fdc8d8SChris Lattner } 7330fdc8d8SChris Lattner 7430fdc8d8SChris Lattner SBAddress 7530fdc8d8SChris Lattner SBLineEntry::GetEndAddress () const 7630fdc8d8SChris Lattner { 7730fdc8d8SChris Lattner SBAddress sb_address; 78*6611103cSGreg Clayton if (m_opaque_ap.get()) 7930fdc8d8SChris Lattner { 80*6611103cSGreg Clayton sb_address.SetAddress(&m_opaque_ap->range.GetBaseAddress()); 81*6611103cSGreg Clayton sb_address.OffsetAddress(m_opaque_ap->range.GetByteSize()); 8230fdc8d8SChris Lattner } 8330fdc8d8SChris Lattner return sb_address; 8430fdc8d8SChris Lattner } 8530fdc8d8SChris Lattner 8630fdc8d8SChris Lattner bool 8730fdc8d8SChris Lattner SBLineEntry::IsValid () const 8830fdc8d8SChris Lattner { 89*6611103cSGreg Clayton return m_opaque_ap.get() != NULL; 9030fdc8d8SChris Lattner } 9130fdc8d8SChris Lattner 9230fdc8d8SChris Lattner 9330fdc8d8SChris Lattner SBFileSpec 9430fdc8d8SChris Lattner SBLineEntry::GetFileSpec () const 9530fdc8d8SChris Lattner { 9630fdc8d8SChris Lattner SBFileSpec sb_file_spec; 97*6611103cSGreg Clayton if (m_opaque_ap.get() && m_opaque_ap->file) 98*6611103cSGreg Clayton sb_file_spec.SetFileSpec(m_opaque_ap->file); 9930fdc8d8SChris Lattner return sb_file_spec; 10030fdc8d8SChris Lattner } 10130fdc8d8SChris Lattner 10230fdc8d8SChris Lattner uint32_t 10330fdc8d8SChris Lattner SBLineEntry::GetLine () const 10430fdc8d8SChris Lattner { 105*6611103cSGreg Clayton if (m_opaque_ap.get()) 106*6611103cSGreg Clayton return m_opaque_ap->line; 10730fdc8d8SChris Lattner return 0; 10830fdc8d8SChris Lattner } 10930fdc8d8SChris Lattner 11030fdc8d8SChris Lattner 11130fdc8d8SChris Lattner uint32_t 11230fdc8d8SChris Lattner SBLineEntry::GetColumn () const 11330fdc8d8SChris Lattner { 114*6611103cSGreg Clayton if (m_opaque_ap.get()) 115*6611103cSGreg Clayton return m_opaque_ap->column; 11630fdc8d8SChris Lattner return 0; 11730fdc8d8SChris Lattner } 11830fdc8d8SChris Lattner 11930fdc8d8SChris Lattner bool 12030fdc8d8SChris Lattner SBLineEntry::operator == (const SBLineEntry &rhs) const 12130fdc8d8SChris Lattner { 122*6611103cSGreg Clayton lldb_private::LineEntry *lhs_ptr = m_opaque_ap.get(); 123*6611103cSGreg Clayton lldb_private::LineEntry *rhs_ptr = rhs.m_opaque_ap.get(); 12430fdc8d8SChris Lattner 12530fdc8d8SChris Lattner if (lhs_ptr && rhs_ptr) 12630fdc8d8SChris Lattner return lldb_private::LineEntry::Compare (*lhs_ptr, *rhs_ptr) == 0; 12730fdc8d8SChris Lattner 12830fdc8d8SChris Lattner return lhs_ptr == rhs_ptr; 12930fdc8d8SChris Lattner } 13030fdc8d8SChris Lattner 13130fdc8d8SChris Lattner bool 13230fdc8d8SChris Lattner SBLineEntry::operator != (const SBLineEntry &rhs) const 13330fdc8d8SChris Lattner { 134*6611103cSGreg Clayton lldb_private::LineEntry *lhs_ptr = m_opaque_ap.get(); 135*6611103cSGreg Clayton lldb_private::LineEntry *rhs_ptr = rhs.m_opaque_ap.get(); 13630fdc8d8SChris Lattner 13730fdc8d8SChris Lattner if (lhs_ptr && rhs_ptr) 13830fdc8d8SChris Lattner return lldb_private::LineEntry::Compare (*lhs_ptr, *rhs_ptr) != 0; 13930fdc8d8SChris Lattner 14030fdc8d8SChris Lattner return lhs_ptr != rhs_ptr; 14130fdc8d8SChris Lattner } 14230fdc8d8SChris Lattner 14330fdc8d8SChris Lattner const lldb_private::LineEntry * 14430fdc8d8SChris Lattner SBLineEntry::operator->() const 14530fdc8d8SChris Lattner { 146*6611103cSGreg Clayton return m_opaque_ap.get(); 14730fdc8d8SChris Lattner } 14830fdc8d8SChris Lattner 14930fdc8d8SChris Lattner const lldb_private::LineEntry & 15030fdc8d8SChris Lattner SBLineEntry::operator*() const 15130fdc8d8SChris Lattner { 152*6611103cSGreg Clayton return *m_opaque_ap; 15330fdc8d8SChris Lattner } 15430fdc8d8SChris Lattner 15530fdc8d8SChris Lattner 15630fdc8d8SChris Lattner 15730fdc8d8SChris Lattner 15830fdc8d8SChris Lattner 159