130fdc8d8SChris Lattner //===-- SBBlock.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/SBBlock.h" 1195897c6aSGreg Clayton #include "lldb/API/SBFileSpec.h" 12dde9cff3SCaroline Tice #include "lldb/API/SBStream.h" 1330fdc8d8SChris Lattner #include "lldb/Symbol/Block.h" 1495897c6aSGreg Clayton #include "lldb/Symbol/Function.h" 15dde9cff3SCaroline Tice #include "lldb/Symbol/SymbolContext.h" 1630fdc8d8SChris Lattner 1730fdc8d8SChris Lattner using namespace lldb; 1895897c6aSGreg Clayton using namespace lldb_private; 1930fdc8d8SChris Lattner 2030fdc8d8SChris Lattner 2130fdc8d8SChris Lattner SBBlock::SBBlock () : 226611103cSGreg Clayton m_opaque_ptr (NULL) 2330fdc8d8SChris Lattner { 2430fdc8d8SChris Lattner } 2530fdc8d8SChris Lattner 2630fdc8d8SChris Lattner SBBlock::SBBlock (lldb_private::Block *lldb_object_ptr) : 276611103cSGreg Clayton m_opaque_ptr (lldb_object_ptr) 2830fdc8d8SChris Lattner { 2930fdc8d8SChris Lattner } 3030fdc8d8SChris Lattner 31efabb123SGreg Clayton SBBlock::SBBlock(const SBBlock &rhs) : 32efabb123SGreg Clayton m_opaque_ptr (rhs.m_opaque_ptr) 33efabb123SGreg Clayton { 34efabb123SGreg Clayton } 35efabb123SGreg Clayton 36efabb123SGreg Clayton const SBBlock & 37efabb123SGreg Clayton SBBlock::operator = (const SBBlock &rhs) 38efabb123SGreg Clayton { 39efabb123SGreg Clayton m_opaque_ptr = rhs.m_opaque_ptr; 40efabb123SGreg Clayton return *this; 41efabb123SGreg Clayton } 42efabb123SGreg Clayton 4330fdc8d8SChris Lattner SBBlock::~SBBlock () 4430fdc8d8SChris Lattner { 456611103cSGreg Clayton m_opaque_ptr = NULL; 4630fdc8d8SChris Lattner } 4730fdc8d8SChris Lattner 4830fdc8d8SChris Lattner bool 4930fdc8d8SChris Lattner SBBlock::IsValid () const 5030fdc8d8SChris Lattner { 516611103cSGreg Clayton return m_opaque_ptr != NULL; 5230fdc8d8SChris Lattner } 5330fdc8d8SChris Lattner 5495897c6aSGreg Clayton bool 5595897c6aSGreg Clayton SBBlock::IsInlined () const 5695897c6aSGreg Clayton { 5795897c6aSGreg Clayton if (m_opaque_ptr) 5895897c6aSGreg Clayton return m_opaque_ptr->GetInlinedFunctionInfo () != NULL; 5995897c6aSGreg Clayton return false; 6095897c6aSGreg Clayton } 6195897c6aSGreg Clayton 6295897c6aSGreg Clayton const char * 6395897c6aSGreg Clayton SBBlock::GetInlinedName () const 6495897c6aSGreg Clayton { 6595897c6aSGreg Clayton if (m_opaque_ptr) 6695897c6aSGreg Clayton { 6795897c6aSGreg Clayton const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo (); 6895897c6aSGreg Clayton if (inlined_info) 6995897c6aSGreg Clayton return inlined_info->GetName().AsCString (NULL); 7095897c6aSGreg Clayton } 7195897c6aSGreg Clayton return NULL; 7295897c6aSGreg Clayton } 7395897c6aSGreg Clayton 7495897c6aSGreg Clayton SBFileSpec 7595897c6aSGreg Clayton SBBlock::GetInlinedCallSiteFile () const 7695897c6aSGreg Clayton { 7795897c6aSGreg Clayton SBFileSpec sb_file; 7895897c6aSGreg Clayton if (m_opaque_ptr) 7995897c6aSGreg Clayton { 8095897c6aSGreg Clayton const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo (); 8195897c6aSGreg Clayton if (inlined_info) 8295897c6aSGreg Clayton sb_file.SetFileSpec (inlined_info->GetCallSite().GetFile()); 8395897c6aSGreg Clayton } 8495897c6aSGreg Clayton return sb_file; 8595897c6aSGreg Clayton } 8695897c6aSGreg Clayton 8795897c6aSGreg Clayton uint32_t 8895897c6aSGreg Clayton SBBlock::GetInlinedCallSiteLine () const 8995897c6aSGreg Clayton { 9095897c6aSGreg Clayton if (m_opaque_ptr) 9195897c6aSGreg Clayton { 9295897c6aSGreg Clayton const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo (); 9395897c6aSGreg Clayton if (inlined_info) 9495897c6aSGreg Clayton return inlined_info->GetCallSite().GetLine(); 9595897c6aSGreg Clayton } 9695897c6aSGreg Clayton return 0; 9795897c6aSGreg Clayton } 9895897c6aSGreg Clayton 9995897c6aSGreg Clayton uint32_t 10095897c6aSGreg Clayton SBBlock::GetInlinedCallSiteColumn () const 10195897c6aSGreg Clayton { 10295897c6aSGreg Clayton if (m_opaque_ptr) 10395897c6aSGreg Clayton { 10495897c6aSGreg Clayton const InlineFunctionInfo* inlined_info = m_opaque_ptr->GetInlinedFunctionInfo (); 10595897c6aSGreg Clayton if (inlined_info) 10695897c6aSGreg Clayton return inlined_info->GetCallSite().GetColumn(); 10795897c6aSGreg Clayton } 10895897c6aSGreg Clayton return 0; 10995897c6aSGreg Clayton } 11095897c6aSGreg Clayton 11130fdc8d8SChris Lattner void 11230fdc8d8SChris Lattner SBBlock::AppendVariables (bool can_create, bool get_parent_variables, lldb_private::VariableList *var_list) 11330fdc8d8SChris Lattner { 11430fdc8d8SChris Lattner if (IsValid()) 11530fdc8d8SChris Lattner { 1161b72fcb7SGreg Clayton bool show_inline = true; 1171b72fcb7SGreg Clayton m_opaque_ptr->AppendVariables (can_create, get_parent_variables, show_inline, var_list); 11830fdc8d8SChris Lattner } 11930fdc8d8SChris Lattner } 12030fdc8d8SChris Lattner 12195897c6aSGreg Clayton SBBlock 12295897c6aSGreg Clayton SBBlock::GetParent () 12395897c6aSGreg Clayton { 12495897c6aSGreg Clayton SBBlock sb_block; 12595897c6aSGreg Clayton if (m_opaque_ptr) 12695897c6aSGreg Clayton sb_block.m_opaque_ptr = m_opaque_ptr->GetParent(); 12795897c6aSGreg Clayton return sb_block; 12895897c6aSGreg Clayton } 12995897c6aSGreg Clayton 13095897c6aSGreg Clayton SBBlock 13195897c6aSGreg Clayton SBBlock::GetSibling () 13295897c6aSGreg Clayton { 13395897c6aSGreg Clayton SBBlock sb_block; 13495897c6aSGreg Clayton if (m_opaque_ptr) 13595897c6aSGreg Clayton sb_block.m_opaque_ptr = m_opaque_ptr->GetSibling(); 13695897c6aSGreg Clayton return sb_block; 13795897c6aSGreg Clayton } 13895897c6aSGreg Clayton 13995897c6aSGreg Clayton SBBlock 14095897c6aSGreg Clayton SBBlock::GetFirstChild () 14195897c6aSGreg Clayton { 14295897c6aSGreg Clayton SBBlock sb_block; 14395897c6aSGreg Clayton if (m_opaque_ptr) 14495897c6aSGreg Clayton sb_block.m_opaque_ptr = m_opaque_ptr->GetFirstChild(); 14595897c6aSGreg Clayton return sb_block; 14695897c6aSGreg Clayton } 14795897c6aSGreg Clayton 1484838131bSGreg Clayton const lldb_private::Block * 1494838131bSGreg Clayton SBBlock::get () const 1504838131bSGreg Clayton { 1514838131bSGreg Clayton return m_opaque_ptr; 1524838131bSGreg Clayton } 1534838131bSGreg Clayton 154*72eff18aSGreg Clayton void 155*72eff18aSGreg Clayton SBBlock::reset (lldb_private::Block *block) 156*72eff18aSGreg Clayton { 157*72eff18aSGreg Clayton m_opaque_ptr = block; 158*72eff18aSGreg Clayton } 15930fdc8d8SChris Lattner 160dde9cff3SCaroline Tice bool 161dde9cff3SCaroline Tice SBBlock::GetDescription (SBStream &description) 162dde9cff3SCaroline Tice { 163dde9cff3SCaroline Tice if (m_opaque_ptr) 164dde9cff3SCaroline Tice { 165dde9cff3SCaroline Tice lldb::user_id_t id = m_opaque_ptr->GetID(); 166dde9cff3SCaroline Tice description.Printf ("Block: {id: %d} ", id); 167dde9cff3SCaroline Tice if (IsInlined()) 168dde9cff3SCaroline Tice { 169dde9cff3SCaroline Tice description.Printf (" (inlined, '%s') ", GetInlinedName()); 170dde9cff3SCaroline Tice } 171dde9cff3SCaroline Tice lldb_private::SymbolContext sc; 172dde9cff3SCaroline Tice m_opaque_ptr->CalculateSymbolContext (&sc); 173dde9cff3SCaroline Tice if (sc.function) 174dde9cff3SCaroline Tice { 175dde9cff3SCaroline Tice m_opaque_ptr->DumpAddressRanges (description.get(), 176dde9cff3SCaroline Tice sc.function->GetAddressRange().GetBaseAddress().GetFileAddress()); 177dde9cff3SCaroline Tice } 178dde9cff3SCaroline Tice } 179dde9cff3SCaroline Tice else 180dde9cff3SCaroline Tice description.Printf ("No value"); 18130fdc8d8SChris Lattner 182dde9cff3SCaroline Tice return true; 183dde9cff3SCaroline Tice } 184