LibCxxAtomic.cpp revision 303241
1//===-- LibCxxAtomic.cpp ------------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#include "LibCxxAtomic.h" 11 12using namespace lldb; 13using namespace lldb_private; 14using namespace lldb_private::formatters; 15 16bool 17lldb_private::formatters::LibCxxAtomicSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options) 18{ 19 static ConstString g___a_("__a_"); 20 21 if (ValueObjectSP child = valobj.GetChildMemberWithName(g___a_, true)) 22 { 23 std::string summary; 24 if (child->GetSummaryAsCString(summary, options) && summary.size() > 0) 25 { 26 stream.Printf("%s", summary.c_str()); 27 return true; 28 } 29 } 30 31 return false; 32} 33 34namespace lldb_private { 35 namespace formatters { 36 class LibcxxStdAtomicSyntheticFrontEnd : public SyntheticChildrenFrontEnd 37 { 38 public: 39 LibcxxStdAtomicSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); 40 41 ~LibcxxStdAtomicSyntheticFrontEnd() override = default; 42 43 size_t 44 CalculateNumChildren() override; 45 46 lldb::ValueObjectSP 47 GetChildAtIndex(size_t idx) override; 48 49 bool 50 Update() override; 51 52 bool 53 MightHaveChildren() override; 54 55 size_t 56 GetIndexOfChildWithName(const ConstString &name) override; 57 58 lldb::ValueObjectSP 59 GetSyntheticValue () override; 60 private: 61 ValueObject *m_real_child; 62 }; 63 } // namespace formatters 64} // namespace lldb_private 65 66lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::LibcxxStdAtomicSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) : 67 SyntheticChildrenFrontEnd(*valobj_sp), 68 m_real_child(nullptr) 69{ 70} 71 72bool 73lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::Update() 74{ 75 static ConstString g___a_("__a_"); 76 77 m_real_child = m_backend.GetChildMemberWithName(g___a_, true).get(); 78 79 return false; 80} 81 82bool 83lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::MightHaveChildren() 84{ 85 return true; 86} 87 88size_t 89lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::CalculateNumChildren() 90{ 91 return m_real_child ? m_real_child->GetNumChildren() : 0; 92} 93 94lldb::ValueObjectSP 95lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::GetChildAtIndex(size_t idx) 96{ 97 return m_real_child ? m_real_child->GetChildAtIndex(idx, true) : nullptr; 98} 99 100size_t 101lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::GetIndexOfChildWithName(const ConstString &name) 102{ 103 return m_real_child ? m_real_child->GetIndexOfChildWithName(name) : UINT32_MAX; 104} 105 106lldb::ValueObjectSP 107lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::GetSyntheticValue () 108{ 109 if (m_real_child && m_real_child->CanProvideValue()) 110 return m_real_child->GetSP(); 111 return nullptr; 112} 113 114SyntheticChildrenFrontEnd* 115lldb_private::formatters::LibcxxAtomicSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP valobj_sp) 116{ 117 if (valobj_sp) 118 return new LibcxxStdAtomicSyntheticFrontEnd(valobj_sp); 119 return nullptr; 120} 121 122