| //===-- LibCxx.h ---------------------------------------------------*- C++ |
| //-*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef liblldb_LibCxx_h_ |
| #define liblldb_LibCxx_h_ |
| |
| #include "lldb/Core/ValueObject.h" |
| #include "lldb/DataFormatters/TypeSummary.h" |
| #include "lldb/DataFormatters/TypeSynthetic.h" |
| #include "lldb/Utility/Stream.h" |
| |
| namespace lldb_private { |
| namespace formatters { |
| |
| bool LibcxxStringSummaryProvider( |
| ValueObject &valobj, Stream &stream, |
| const TypeSummaryOptions &options); // libc++ std::string |
| |
| bool LibcxxWStringSummaryProvider( |
| ValueObject &valobj, Stream &stream, |
| const TypeSummaryOptions &options); // libc++ std::wstring |
| |
| bool LibcxxSmartPointerSummaryProvider( |
| ValueObject &valobj, Stream &stream, |
| const TypeSummaryOptions |
| &options); // libc++ std::shared_ptr<> and std::weak_ptr<> |
| |
| SyntheticChildrenFrontEnd * |
| LibcxxVectorBoolSyntheticFrontEndCreator(CXXSyntheticChildren *, |
| lldb::ValueObjectSP); |
| |
| bool LibcxxContainerSummaryProvider(ValueObject &valobj, Stream &stream, |
| const TypeSummaryOptions &options); |
| |
| class LibCxxMapIteratorSyntheticFrontEnd : public SyntheticChildrenFrontEnd { |
| public: |
| LibCxxMapIteratorSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp); |
| |
| size_t CalculateNumChildren() override; |
| |
| lldb::ValueObjectSP GetChildAtIndex(size_t idx) override; |
| |
| bool Update() override; |
| |
| bool MightHaveChildren() override; |
| |
| size_t GetIndexOfChildWithName(const ConstString &name) override; |
| |
| ~LibCxxMapIteratorSyntheticFrontEnd() override; |
| |
| private: |
| ValueObject *m_pair_ptr; |
| lldb::ValueObjectSP m_pair_sp; |
| }; |
| |
| SyntheticChildrenFrontEnd * |
| LibCxxMapIteratorSyntheticFrontEndCreator(CXXSyntheticChildren *, |
| lldb::ValueObjectSP); |
| |
| SyntheticChildrenFrontEnd * |
| LibCxxVectorIteratorSyntheticFrontEndCreator(CXXSyntheticChildren *, |
| lldb::ValueObjectSP); |
| |
| class LibcxxSharedPtrSyntheticFrontEnd : public SyntheticChildrenFrontEnd { |
| public: |
| LibcxxSharedPtrSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp); |
| |
| size_t CalculateNumChildren() override; |
| |
| lldb::ValueObjectSP GetChildAtIndex(size_t idx) override; |
| |
| bool Update() override; |
| |
| bool MightHaveChildren() override; |
| |
| size_t GetIndexOfChildWithName(const ConstString &name) override; |
| |
| ~LibcxxSharedPtrSyntheticFrontEnd() override; |
| |
| private: |
| ValueObject *m_cntrl; |
| lldb::ValueObjectSP m_count_sp; |
| lldb::ValueObjectSP m_weak_count_sp; |
| uint8_t m_ptr_size; |
| lldb::ByteOrder m_byte_order; |
| }; |
| |
| SyntheticChildrenFrontEnd * |
| LibcxxBitsetSyntheticFrontEndCreator(CXXSyntheticChildren *, |
| lldb::ValueObjectSP); |
| |
| SyntheticChildrenFrontEnd * |
| LibcxxSharedPtrSyntheticFrontEndCreator(CXXSyntheticChildren *, |
| lldb::ValueObjectSP); |
| |
| SyntheticChildrenFrontEnd * |
| LibcxxStdVectorSyntheticFrontEndCreator(CXXSyntheticChildren *, |
| lldb::ValueObjectSP); |
| |
| SyntheticChildrenFrontEnd * |
| LibcxxStdListSyntheticFrontEndCreator(CXXSyntheticChildren *, |
| lldb::ValueObjectSP); |
| |
| SyntheticChildrenFrontEnd * |
| LibcxxStdForwardListSyntheticFrontEndCreator(CXXSyntheticChildren *, |
| lldb::ValueObjectSP); |
| |
| SyntheticChildrenFrontEnd * |
| LibcxxStdMapSyntheticFrontEndCreator(CXXSyntheticChildren *, |
| lldb::ValueObjectSP); |
| |
| SyntheticChildrenFrontEnd * |
| LibcxxStdUnorderedMapSyntheticFrontEndCreator(CXXSyntheticChildren *, |
| lldb::ValueObjectSP); |
| |
| SyntheticChildrenFrontEnd * |
| LibcxxInitializerListSyntheticFrontEndCreator(CXXSyntheticChildren *, |
| lldb::ValueObjectSP); |
| |
| SyntheticChildrenFrontEnd *LibcxxFunctionFrontEndCreator(CXXSyntheticChildren *, |
| lldb::ValueObjectSP); |
| |
| SyntheticChildrenFrontEnd *LibcxxQueueFrontEndCreator(CXXSyntheticChildren *, |
| lldb::ValueObjectSP); |
| |
| SyntheticChildrenFrontEnd *LibcxxTupleFrontEndCreator(CXXSyntheticChildren *, |
| lldb::ValueObjectSP); |
| |
| } // namespace formatters |
| } // namespace lldb_private |
| |
| #endif // liblldb_LibCxx_h_ |