]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h
Fix a memory leak in if_delgroups() introduced in r334118.
[FreeBSD/FreeBSD.git] / contrib / llvm-project / lldb / source / Plugins / Language / CPlusPlus / LibCxx.h
1 //===-- LibCxx.h ---------------------------------------------------*- C++
2 //-*-===//
3 //
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef liblldb_LibCxx_h_
11 #define liblldb_LibCxx_h_
12
13 #include "lldb/Core/ValueObject.h"
14 #include "lldb/DataFormatters/TypeSummary.h"
15 #include "lldb/DataFormatters/TypeSynthetic.h"
16 #include "lldb/Utility/Stream.h"
17
18 namespace lldb_private {
19 namespace formatters {
20
21 bool LibcxxStringSummaryProviderASCII(
22     ValueObject &valobj, Stream &stream,
23     const TypeSummaryOptions &summary_options); // libc++ std::string
24
25 bool LibcxxStringSummaryProviderUTF16(
26     ValueObject &valobj, Stream &stream,
27     const TypeSummaryOptions &summary_options); // libc++ std::u16string
28
29 bool LibcxxStringSummaryProviderUTF32(
30     ValueObject &valobj, Stream &stream,
31     const TypeSummaryOptions &summary_options); // libc++ std::u32string
32
33 bool LibcxxWStringSummaryProvider(
34     ValueObject &valobj, Stream &stream,
35     const TypeSummaryOptions &options); // libc++ std::wstring
36
37 bool LibcxxOptionalSummaryProvider(
38     ValueObject &valobj, Stream &stream,
39     const TypeSummaryOptions &options); // libc++ std::optional<>
40
41 bool LibcxxSmartPointerSummaryProvider(
42     ValueObject &valobj, Stream &stream,
43     const TypeSummaryOptions
44         &options); // libc++ std::shared_ptr<> and std::weak_ptr<>
45
46 bool LibcxxFunctionSummaryProvider(
47     ValueObject &valobj, Stream &stream,
48     const TypeSummaryOptions &options); // libc++ std::function<>
49
50 SyntheticChildrenFrontEnd *
51 LibcxxVectorBoolSyntheticFrontEndCreator(CXXSyntheticChildren *,
52                                          lldb::ValueObjectSP);
53
54 bool LibcxxContainerSummaryProvider(ValueObject &valobj, Stream &stream,
55                                     const TypeSummaryOptions &options);
56
57 class LibCxxMapIteratorSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
58 public:
59   LibCxxMapIteratorSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp);
60
61   size_t CalculateNumChildren() override;
62
63   lldb::ValueObjectSP GetChildAtIndex(size_t idx) override;
64
65   bool Update() override;
66
67   bool MightHaveChildren() override;
68
69   size_t GetIndexOfChildWithName(ConstString name) override;
70
71   ~LibCxxMapIteratorSyntheticFrontEnd() override;
72
73 private:
74   ValueObject *m_pair_ptr;
75   lldb::ValueObjectSP m_pair_sp;
76 };
77
78 SyntheticChildrenFrontEnd *
79 LibCxxMapIteratorSyntheticFrontEndCreator(CXXSyntheticChildren *,
80                                           lldb::ValueObjectSP);
81
82 SyntheticChildrenFrontEnd *
83 LibCxxVectorIteratorSyntheticFrontEndCreator(CXXSyntheticChildren *,
84                                              lldb::ValueObjectSP);
85
86 class LibcxxSharedPtrSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
87 public:
88   LibcxxSharedPtrSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp);
89
90   size_t CalculateNumChildren() override;
91
92   lldb::ValueObjectSP GetChildAtIndex(size_t idx) override;
93
94   bool Update() override;
95
96   bool MightHaveChildren() override;
97
98   size_t GetIndexOfChildWithName(ConstString name) override;
99
100   ~LibcxxSharedPtrSyntheticFrontEnd() override;
101
102 private:
103   ValueObject *m_cntrl;
104   lldb::ValueObjectSP m_count_sp;
105   lldb::ValueObjectSP m_weak_count_sp;
106   uint8_t m_ptr_size;
107   lldb::ByteOrder m_byte_order;
108 };
109
110 SyntheticChildrenFrontEnd *
111 LibcxxBitsetSyntheticFrontEndCreator(CXXSyntheticChildren *,
112                                      lldb::ValueObjectSP);
113
114 SyntheticChildrenFrontEnd *
115 LibcxxSharedPtrSyntheticFrontEndCreator(CXXSyntheticChildren *,
116                                         lldb::ValueObjectSP);
117
118 SyntheticChildrenFrontEnd *
119 LibcxxStdVectorSyntheticFrontEndCreator(CXXSyntheticChildren *,
120                                         lldb::ValueObjectSP);
121
122 SyntheticChildrenFrontEnd *
123 LibcxxStdListSyntheticFrontEndCreator(CXXSyntheticChildren *,
124                                       lldb::ValueObjectSP);
125
126 SyntheticChildrenFrontEnd *
127 LibcxxStdForwardListSyntheticFrontEndCreator(CXXSyntheticChildren *,
128                                              lldb::ValueObjectSP);
129
130 SyntheticChildrenFrontEnd *
131 LibcxxStdMapSyntheticFrontEndCreator(CXXSyntheticChildren *,
132                                      lldb::ValueObjectSP);
133
134 SyntheticChildrenFrontEnd *
135 LibcxxStdUnorderedMapSyntheticFrontEndCreator(CXXSyntheticChildren *,
136                                               lldb::ValueObjectSP);
137
138 SyntheticChildrenFrontEnd *
139 LibcxxInitializerListSyntheticFrontEndCreator(CXXSyntheticChildren *,
140                                               lldb::ValueObjectSP);
141
142 SyntheticChildrenFrontEnd *LibcxxQueueFrontEndCreator(CXXSyntheticChildren *,
143                                                       lldb::ValueObjectSP);
144
145 SyntheticChildrenFrontEnd *LibcxxTupleFrontEndCreator(CXXSyntheticChildren *,
146                                                       lldb::ValueObjectSP);
147
148 SyntheticChildrenFrontEnd *
149 LibcxxOptionalFrontEndCreator(CXXSyntheticChildren *,
150                               lldb::ValueObjectSP valobj_sp);
151
152 SyntheticChildrenFrontEnd *
153 LibcxxVariantFrontEndCreator(CXXSyntheticChildren *,
154                              lldb::ValueObjectSP valobj_sp);
155
156 } // namespace formatters
157 } // namespace lldb_private
158
159 #endif // liblldb_LibCxx_h_