SBValue.cpp revision e49ec18f1868168c8927ae30a379db176ca8cce3
1c3aae25116e66c177579b0b79182b09340b19753Chris Lattner//===-- SBValue.cpp ---------------------------------------------*- C++ -*-===// 2ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman// 36fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// The LLVM Compiler Infrastructure 46fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// 56fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// This file is distributed under the University of Illinois Open Source 66fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell// License. See LICENSE.TXT for details. 7ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman// 86fbcc26f1460eaee4e0eb8b426fc1ff0c7af11beJohn Criswell//===----------------------------------------------------------------------===// 9ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman 10c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/API/SBValue.h" 11c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/API/SBStream.h" 12ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman 13cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner#include "lldb/Core/DataExtractor.h" 14cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner#include "lldb/Core/Module.h" 15cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner#include "lldb/Core/Stream.h" 16cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner#include "lldb/Core/StreamFile.h" 17cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner#include "lldb/Core/Value.h" 18c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/Core/ValueObject.h" 19cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner#include "lldb/Symbol/Block.h" 20c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/Symbol/ObjectFile.h" 21d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke#include "lldb/Symbol/Variable.h" 22d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke#include "lldb/Target/ExecutionContext.h" 23c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/Target/Process.h" 24c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/Target/StackFrame.h" 25c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/Target/Thread.h" 26c3aae25116e66c177579b0b79182b09340b19753Chris Lattner 27c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/API/SBProcess.h" 28c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/API/SBTarget.h" 29c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/API/SBThread.h" 30c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/API/SBFrame.h" 31c3aae25116e66c177579b0b79182b09340b19753Chris Lattner#include "lldb/API/SBDebugger.h" 32c3aae25116e66c177579b0b79182b09340b19753Chris Lattner 33c3aae25116e66c177579b0b79182b09340b19753Chris Lattnerusing namespace lldb; 34c3aae25116e66c177579b0b79182b09340b19753Chris Lattnerusing namespace lldb_private; 35c3aae25116e66c177579b0b79182b09340b19753Chris Lattner 36c3aae25116e66c177579b0b79182b09340b19753Chris LattnerSBValue::SBValue () : 37cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner m_opaque_sp () 38cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner{ 39063287a76b5d1486f498fcf674a26d1155471a3fChris Lattner} 40c3aae25116e66c177579b0b79182b09340b19753Chris Lattner 41cacf462915344c2af25eef1af1f3ee2c7280ff56Chris LattnerSBValue::SBValue (const lldb::ValueObjectSP &value_sp) : 42c3aae25116e66c177579b0b79182b09340b19753Chris Lattner m_opaque_sp (value_sp) 43c3aae25116e66c177579b0b79182b09340b19753Chris Lattner{ 44cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner} 45cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner 46c3aae25116e66c177579b0b79182b09340b19753Chris LattnerSBValue::~SBValue() 47691ef2ba066dda14ae4ac0ad645054fbc967785aAndrew Lenharth{ 48691ef2ba066dda14ae4ac0ad645054fbc967785aAndrew Lenharth} 49691ef2ba066dda14ae4ac0ad645054fbc967785aAndrew Lenharth 50691ef2ba066dda14ae4ac0ad645054fbc967785aAndrew Lenharthbool 51cacf462915344c2af25eef1af1f3ee2c7280ff56Chris LattnerSBValue::IsValid () const 52063287a76b5d1486f498fcf674a26d1155471a3fChris Lattner{ 53c3aae25116e66c177579b0b79182b09340b19753Chris Lattner return (m_opaque_sp.get() != NULL); 54c3aae25116e66c177579b0b79182b09340b19753Chris Lattner} 55cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner 56cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattnerconst char * 57c3aae25116e66c177579b0b79182b09340b19753Chris LattnerSBValue::GetName() 58063287a76b5d1486f498fcf674a26d1155471a3fChris Lattner{ 59063287a76b5d1486f498fcf674a26d1155471a3fChris Lattner if (IsValid()) 60cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner return m_opaque_sp->GetName().AsCString(); 611080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner else 621080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner return NULL; 631080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner} 641080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner 651080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattnerconst char * 661080b9ee534579c67f7c99364cc6fa11edbcd919Chris LattnerSBValue::GetTypeName () 671080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner{ 681080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner if (IsValid()) 69ea61c358720aa6c7a159d51658b34276316aa841Misha Brukman return m_opaque_sp->GetTypeName().AsCString(); 70c3aae25116e66c177579b0b79182b09340b19753Chris Lattner else 71cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner return NULL; 72c3aae25116e66c177579b0b79182b09340b19753Chris Lattner} 73cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner 74c3aae25116e66c177579b0b79182b09340b19753Chris Lattnersize_t 75c3aae25116e66c177579b0b79182b09340b19753Chris LattnerSBValue::GetByteSize () 76c3aae25116e66c177579b0b79182b09340b19753Chris Lattner{ 77cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner size_t result = 0; 78c3aae25116e66c177579b0b79182b09340b19753Chris Lattner 79cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner if (IsValid()) 80c3aae25116e66c177579b0b79182b09340b19753Chris Lattner result = m_opaque_sp->GetByteSize(); 81cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner 82c3aae25116e66c177579b0b79182b09340b19753Chris Lattner return result; 83c3aae25116e66c177579b0b79182b09340b19753Chris Lattner} 84c3aae25116e66c177579b0b79182b09340b19753Chris Lattner 85cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattnerbool 86c3aae25116e66c177579b0b79182b09340b19753Chris LattnerSBValue::IsInScope (const SBFrame &frame) 87c3aae25116e66c177579b0b79182b09340b19753Chris Lattner{ 88063287a76b5d1486f498fcf674a26d1155471a3fChris Lattner bool result = false; 89c3aae25116e66c177579b0b79182b09340b19753Chris Lattner 90d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner if (IsValid()) 91d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner result = m_opaque_sp->IsInScope (frame.get()); 92d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner 93d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner return result; 94d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner} 95d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner 96c3aae25116e66c177579b0b79182b09340b19753Chris Lattnerconst char * 97c3aae25116e66c177579b0b79182b09340b19753Chris LattnerSBValue::GetValue (const SBFrame &frame) 98c3aae25116e66c177579b0b79182b09340b19753Chris Lattner{ 99c3aae25116e66c177579b0b79182b09340b19753Chris Lattner const char *value_string = NULL; 100c3aae25116e66c177579b0b79182b09340b19753Chris Lattner if ( m_opaque_sp) 101c3aae25116e66c177579b0b79182b09340b19753Chris Lattner value_string = m_opaque_sp->GetValueAsCString (frame.get()); 102c3aae25116e66c177579b0b79182b09340b19753Chris Lattner return value_string; 10315e4b01920d6a0ffbe35d3e5aa88a4b42970b6a7Chris Lattner} 104d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner 105c3aae25116e66c177579b0b79182b09340b19753Chris Lattnerconst char * 106d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris LattnerSBValue::GetObjectDescription (const SBFrame &frame) 107d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner{ 108d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner const char *value_string = NULL; 109cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner if ( m_opaque_sp) 110cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner value_string = m_opaque_sp->GetObjectDescription (frame.get()); 111d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner return value_string; 112d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner} 113d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner 114d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattnerbool 115d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris LattnerSBValue::GetValueDidChange (const SBFrame &frame) 116d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner{ 117d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner if (IsValid()) 118d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner return m_opaque_sp->GetValueDidChange (frame.get()); 11918c2f13e0f9d0e5d6227cf6d1881e9ee3d1b6109Chris Lattner return false; 12018c2f13e0f9d0e5d6227cf6d1881e9ee3d1b6109Chris Lattner} 121d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner 122d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattnerconst char * 123cacf462915344c2af25eef1af1f3ee2c7280ff56Chris LattnerSBValue::GetSummary (const SBFrame &frame) 124cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner{ 125c3aae25116e66c177579b0b79182b09340b19753Chris Lattner const char *value_string = NULL; 126c3aae25116e66c177579b0b79182b09340b19753Chris Lattner if ( m_opaque_sp) 127c3aae25116e66c177579b0b79182b09340b19753Chris Lattner value_string = m_opaque_sp->GetSummaryAsCString(frame.get()); 1284c1eae9fb329e0e371d453957c56426294de24e9Chris Lattner return value_string; 1294211e73c4905af413db7524f24414c16a7f69102Chris Lattner} 1304211e73c4905af413db7524f24414c16a7f69102Chris Lattner 131c3aae25116e66c177579b0b79182b09340b19753Chris Lattnerconst char * 132c3aae25116e66c177579b0b79182b09340b19753Chris LattnerSBValue::GetLocation (const SBFrame &frame) 133c3aae25116e66c177579b0b79182b09340b19753Chris Lattner{ 134cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner const char *value_string = NULL; 135cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner if (IsValid()) 13602b86f52ed19213ef4911da902145155c03fb136Chris Lattner value_string = m_opaque_sp->GetLocationAsCString(frame.get()); 13702b86f52ed19213ef4911da902145155c03fb136Chris Lattner return value_string; 13802b86f52ed19213ef4911da902145155c03fb136Chris Lattner} 13902b86f52ed19213ef4911da902145155c03fb136Chris Lattner 1404211e73c4905af413db7524f24414c16a7f69102Chris Lattnerbool 1414211e73c4905af413db7524f24414c16a7f69102Chris LattnerSBValue::SetValueFromCString (const SBFrame &frame, const char *value_str) 14202b86f52ed19213ef4911da902145155c03fb136Chris Lattner{ 14302b86f52ed19213ef4911da902145155c03fb136Chris Lattner bool success = false; 1444c1eae9fb329e0e371d453957c56426294de24e9Chris Lattner if (IsValid()) 14502b86f52ed19213ef4911da902145155c03fb136Chris Lattner success = m_opaque_sp->SetValueFromCString (frame.get(), value_str); 14602b86f52ed19213ef4911da902145155c03fb136Chris Lattner return success; 14702b86f52ed19213ef4911da902145155c03fb136Chris Lattner} 14802b86f52ed19213ef4911da902145155c03fb136Chris Lattner 14902b86f52ed19213ef4911da902145155c03fb136Chris LattnerSBValue 1507cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris LattnerSBValue::GetChildAtIndex (uint32_t idx) 151cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner{ 1521ccae666f596d5aeca5c9942995763600b622062Chris Lattner lldb::ValueObjectSP child_sp; 1531ccae666f596d5aeca5c9942995763600b622062Chris Lattner 1541ccae666f596d5aeca5c9942995763600b622062Chris Lattner if (IsValid()) 1551ccae666f596d5aeca5c9942995763600b622062Chris Lattner { 156c3aae25116e66c177579b0b79182b09340b19753Chris Lattner child_sp = m_opaque_sp->GetChildAtIndex (idx, true); 157cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner } 158c3aae25116e66c177579b0b79182b09340b19753Chris Lattner 159c3aae25116e66c177579b0b79182b09340b19753Chris Lattner SBValue sb_value (child_sp); 160c3aae25116e66c177579b0b79182b09340b19753Chris Lattner return sb_value; 161c3aae25116e66c177579b0b79182b09340b19753Chris Lattner} 162c3aae25116e66c177579b0b79182b09340b19753Chris Lattner 163c3aae25116e66c177579b0b79182b09340b19753Chris Lattneruint32_t 164c3aae25116e66c177579b0b79182b09340b19753Chris LattnerSBValue::GetIndexOfChildWithName (const char *name) 1652d86ea21dd76647cb054fd5d27df9e49efc672b6Andrew Lenharth{ 1662d86ea21dd76647cb054fd5d27df9e49efc672b6Andrew Lenharth if (IsValid()) 167f7db8c69a12582c7d1ff7c5f25c948dca2dbf7dcChris Lattner return m_opaque_sp->GetIndexOfChildWithName (ConstString(name)); 168f7db8c69a12582c7d1ff7c5f25c948dca2dbf7dcChris Lattner return UINT32_MAX; 169f7db8c69a12582c7d1ff7c5f25c948dca2dbf7dcChris Lattner} 170c3aae25116e66c177579b0b79182b09340b19753Chris Lattner 1714211e73c4905af413db7524f24414c16a7f69102Chris LattnerSBValue 1724211e73c4905af413db7524f24414c16a7f69102Chris LattnerSBValue::GetChildMemberWithName (const char *name) 173c3aae25116e66c177579b0b79182b09340b19753Chris Lattner{ 1747cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner lldb::ValueObjectSP child_sp; 1757cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner const ConstString str_name (name); 1767cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner 1777cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner if (IsValid()) 1787cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner { 1797cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner child_sp = m_opaque_sp->GetChildMemberWithName (str_name, true); 1807cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner } 1819373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman 1829373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman SBValue sb_value (child_sp); 1839373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman return sb_value; 1849373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman} 1859373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman 1869373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman 1879373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begemanuint32_t 1889373a81e53ce5f9f2c06c4209b8b886605aece08Nate BegemanSBValue::GetNumChildren () 1899373a81e53ce5f9f2c06c4209b8b886605aece08Nate Begeman{ 1907cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner uint32_t num_children = 0; 1917cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman 1927cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman if (IsValid()) 1937cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman { 1947cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman num_children = m_opaque_sp->GetNumChildren(); 1957cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman } 1967cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman 1977cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman return num_children; 1987cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman} 1997cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman 2007cbd525ba85ebe440d15fa359ec940e404d14906Nate Begemanbool 2017cbd525ba85ebe440d15fa359ec940e404d14906Nate BegemanSBValue::ValueIsStale () 2027cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman{ 2037cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman bool result = true; 2047cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman 2057cbd525ba85ebe440d15fa359ec940e404d14906Nate Begeman if (IsValid()) 206c3aae25116e66c177579b0b79182b09340b19753Chris Lattner { 207c3aae25116e66c177579b0b79182b09340b19753Chris Lattner result = m_opaque_sp->GetValueIsValid(); 208cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner } 20921074f43ed5165828717ea3606eb2bd222a39b26Chris Lattner 21021074f43ed5165828717ea3606eb2bd222a39b26Chris Lattner return result; 2115f056bf4b862a7c31388a68711dd3b3ed5de2be8Chris Lattner} 2125f056bf4b862a7c31388a68711dd3b3ed5de2be8Chris Lattner 2132d86ea21dd76647cb054fd5d27df9e49efc672b6Andrew Lenharth 2142d86ea21dd76647cb054fd5d27df9e49efc672b6Andrew LenharthSBValue 215691ef2ba066dda14ae4ac0ad645054fbc967785aAndrew LenharthSBValue::Dereference () 216cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner{ 2171b95095857b78e12138c22e76c7936611c51355bChris Lattner if (IsValid()) 2181b95095857b78e12138c22e76c7936611c51355bChris Lattner { 2191b95095857b78e12138c22e76c7936611c51355bChris Lattner if (m_opaque_sp->IsPointerType()) 2201b95095857b78e12138c22e76c7936611c51355bChris Lattner { 2211b95095857b78e12138c22e76c7936611c51355bChris Lattner return GetChildAtIndex(0); 2221b95095857b78e12138c22e76c7936611c51355bChris Lattner } 2231b95095857b78e12138c22e76c7936611c51355bChris Lattner } 2241b95095857b78e12138c22e76c7936611c51355bChris Lattner return *this; 2251b95095857b78e12138c22e76c7936611c51355bChris Lattner} 2261b95095857b78e12138c22e76c7936611c51355bChris Lattner 2271b95095857b78e12138c22e76c7936611c51355bChris Lattnerbool 2281b95095857b78e12138c22e76c7936611c51355bChris LattnerSBValue::TypeIsPtrType () 2291b95095857b78e12138c22e76c7936611c51355bChris Lattner{ 230cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner bool is_ptr_type = false; 231d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner 232d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner if (IsValid()) 2331b95095857b78e12138c22e76c7936611c51355bChris Lattner { 234d1fc96499b7619356c7542200d32da898b79f7c1Chris Lattner is_ptr_type = m_opaque_sp->IsPointerType(); 2357cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner } 23632c392a3a5e397b5f1cc83aaedfab96368d11e8aNate Begeman 23732c392a3a5e397b5f1cc83aaedfab96368d11e8aNate Begeman return is_ptr_type; 2384cf009f49cd37ae9cf4096dfe7ee9bcfa8e59b7aChris Lattner} 2394cf009f49cd37ae9cf4096dfe7ee9bcfa8e59b7aChris Lattner 2401cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattnervoid * 24132c392a3a5e397b5f1cc83aaedfab96368d11e8aNate BegemanSBValue::GetOpaqueType() 24232c392a3a5e397b5f1cc83aaedfab96368d11e8aNate Begeman{ 24332c392a3a5e397b5f1cc83aaedfab96368d11e8aNate Begeman if (m_opaque_sp) 244ff66368a5f83ed62cb7817efc4a16b78c449a4c0Nate Begeman return m_opaque_sp->GetOpaqueClangQualType(); 245ff66368a5f83ed62cb7817efc4a16b78c449a4c0Nate Begeman return NULL; 24632c392a3a5e397b5f1cc83aaedfab96368d11e8aNate Begeman} 2471cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner 2481cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner// Mimic shared pointer... 2491cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattnerlldb_private::ValueObject * 2501cff05c7c216eea0e9173738c2a60b70c2b3c013Chris LattnerSBValue::get() const 2511cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner{ 2521cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner return m_opaque_sp.get(); 253d5d0f9bd20d9df07d6b4d41b7e8ed6d33b6a649dChris Lattner} 2547cf7e3f33f25544d08492d47cc8a1cbba25dc8d7Chris Lattner 2551cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattnerlldb_private::ValueObject * 2561cff05c7c216eea0e9173738c2a60b70c2b3c013Chris LattnerSBValue::operator->() const 2571cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner{ 2581cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner return m_opaque_sp.get(); 2591cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner} 2601cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner 261b29cb29364d3e22f062c695d2d5740dda42d8e8eChris Lattnerlldb::ValueObjectSP & 2621cff05c7c216eea0e9173738c2a60b70c2b3c013Chris LattnerSBValue::operator*() 2631cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner{ 2641cff05c7c216eea0e9173738c2a60b70c2b3c013Chris Lattner return m_opaque_sp; 26515e4b01920d6a0ffbe35d3e5aa88a4b42970b6a7Chris Lattner} 2665f056bf4b862a7c31388a68711dd3b3ed5de2be8Chris Lattner 2674211e73c4905af413db7524f24414c16a7f69102Chris Lattnerconst lldb::ValueObjectSP & 2686765bfed31f06d7ed2f5a87248ffadc9dce10de4Chris LattnerSBValue::operator*() const 2696765bfed31f06d7ed2f5a87248ffadc9dce10de4Chris Lattner{ 2706765bfed31f06d7ed2f5a87248ffadc9dce10de4Chris Lattner return m_opaque_sp; 2714211e73c4905af413db7524f24414c16a7f69102Chris Lattner} 2724211e73c4905af413db7524f24414c16a7f69102Chris Lattner 2734211e73c4905af413db7524f24414c16a7f69102Chris Lattnerbool 274cacf462915344c2af25eef1af1f3ee2c7280ff56Chris LattnerSBValue::GetDescription (SBStream &description) 275cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner{ 2761080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner if (m_opaque_sp) 2771080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner { 2781080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner const char *name = GetName(); 2791080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner const char *type_name = GetTypeName (); 2801080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner size_t byte_size = GetByteSize (); 2811080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner uint32_t num_children = GetNumChildren (); 2821080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner bool is_stale = ValueIsStale (); 2831080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner description.Printf ("name: '%s', type: %s, size: %d", (name != NULL ? name : "<unknown name>"), 2841080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner (type_name != NULL ? type_name : "<unknown type name>"), (int) byte_size); 2851080b9ee534579c67f7c99364cc6fa11edbcd919Chris Lattner if (num_children > 0) 286cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner description.Printf (", num_children: %d", num_children); 287cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner 288cacf462915344c2af25eef1af1f3ee2c7280ff56Chris Lattner if (is_stale) 289 description.Printf (" [value is stale]"); 290 } 291 else 292 description.Printf ("No value"); 293 294 return true; 295} 296