142 lines
5.0 KiB
C++
142 lines
5.0 KiB
C++
//===-- 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/Stream.h"
|
|
#include "lldb/Core/ValueObject.h"
|
|
#include "lldb/DataFormatters/TypeSummary.h"
|
|
#include "lldb/DataFormatters/TypeSynthetic.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<>
|
|
|
|
class LibcxxVectorBoolSyntheticFrontEnd : public SyntheticChildrenFrontEnd
|
|
{
|
|
public:
|
|
LibcxxVectorBoolSyntheticFrontEnd (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;
|
|
|
|
~LibcxxVectorBoolSyntheticFrontEnd() override;
|
|
|
|
private:
|
|
CompilerType m_bool_type;
|
|
ExecutionContextRef m_exe_ctx_ref;
|
|
uint64_t m_count;
|
|
lldb::addr_t m_base_data_address;
|
|
std::map<size_t,lldb::ValueObjectSP> m_children;
|
|
};
|
|
|
|
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;
|
|
};
|
|
|
|
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* LibcxxSharedPtrSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
|
|
|
|
SyntheticChildrenFrontEnd* LibcxxStdVectorSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
|
|
|
|
SyntheticChildrenFrontEnd* LibcxxStdListSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
|
|
|
|
SyntheticChildrenFrontEnd* LibcxxStdMapSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
|
|
|
|
SyntheticChildrenFrontEnd* LibcxxStdUnorderedMapSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
|
|
|
|
SyntheticChildrenFrontEnd* LibcxxInitializerListSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
|
|
|
|
} // namespace formatters
|
|
} // namespace lldb_private
|
|
|
|
#endif // liblldb_LibCxx_h_
|