xref: /freebsd/contrib/llvm-project/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
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 LLDB_SOURCE_PLUGINS_LANGUAGE_CPLUSPLUS_LIBCXX_H
11 #define LLDB_SOURCE_PLUGINS_LANGUAGE_CPLUSPLUS_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 /// Find a child member of \c obj_sp, trying all alternative names in order.
22 lldb::ValueObjectSP
23 GetChildMemberWithName(ValueObject &obj,
24                        llvm::ArrayRef<ConstString> alternative_names);
25 
26 lldb::ValueObjectSP GetFirstValueOfLibCXXCompressedPair(ValueObject &pair);
27 lldb::ValueObjectSP GetSecondValueOfLibCXXCompressedPair(ValueObject &pair);
28 
29 
30 bool LibcxxStringSummaryProviderASCII(
31     ValueObject &valobj, Stream &stream,
32     const TypeSummaryOptions &summary_options); // libc++ std::string
33 
34 bool LibcxxStringSummaryProviderUTF16(
35     ValueObject &valobj, Stream &stream,
36     const TypeSummaryOptions &summary_options); // libc++ std::u16string
37 
38 bool LibcxxStringSummaryProviderUTF32(
39     ValueObject &valobj, Stream &stream,
40     const TypeSummaryOptions &summary_options); // libc++ std::u32string
41 
42 bool LibcxxWStringSummaryProvider(
43     ValueObject &valobj, Stream &stream,
44     const TypeSummaryOptions &options); // libc++ std::wstring
45 
46 bool LibcxxStringViewSummaryProviderASCII(
47     ValueObject &valueObj, Stream &stream,
48     const TypeSummaryOptions &summary_options); // libc++ std::string_view
49 
50 bool LibcxxStringViewSummaryProviderUTF16(
51     ValueObject &valobj, Stream &stream,
52     const TypeSummaryOptions &summary_options); // libc++ std::u16string_view
53 
54 bool LibcxxStringViewSummaryProviderUTF32(
55     ValueObject &valobj, Stream &stream,
56     const TypeSummaryOptions &summary_options); // libc++ std::u32string_view
57 
58 bool LibcxxWStringViewSummaryProvider(
59     ValueObject &valobj, Stream &stream,
60     const TypeSummaryOptions &options); // libc++ std::wstring_view
61 
62 bool LibcxxStdSliceArraySummaryProvider(
63     ValueObject &valobj, Stream &stream,
64     const TypeSummaryOptions &options); // libc++ std::slice_array
65 
66 bool LibcxxSmartPointerSummaryProvider(
67     ValueObject &valobj, Stream &stream,
68     const TypeSummaryOptions
69         &options); // libc++ std::shared_ptr<> and std::weak_ptr<>
70 
71 // libc++ std::unique_ptr<>
72 bool LibcxxUniquePointerSummaryProvider(ValueObject &valobj, Stream &stream,
73                                         const TypeSummaryOptions &options);
74 
75 bool LibcxxFunctionSummaryProvider(
76     ValueObject &valobj, Stream &stream,
77     const TypeSummaryOptions &options); // libc++ std::function<>
78 
79 SyntheticChildrenFrontEnd *
80 LibcxxVectorBoolSyntheticFrontEndCreator(CXXSyntheticChildren *,
81                                          lldb::ValueObjectSP);
82 
83 bool LibcxxContainerSummaryProvider(ValueObject &valobj, Stream &stream,
84                                     const TypeSummaryOptions &options);
85 
86 /// Formatter for libc++ std::span<>.
87 bool LibcxxSpanSummaryProvider(ValueObject &valobj, Stream &stream,
88                                const TypeSummaryOptions &options);
89 
90 SyntheticChildrenFrontEnd *
91 LibCxxVectorIteratorSyntheticFrontEndCreator(CXXSyntheticChildren *,
92                                              lldb::ValueObjectSP);
93 
94 class LibcxxSharedPtrSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
95 public:
96   LibcxxSharedPtrSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp);
97 
98   llvm::Expected<uint32_t> CalculateNumChildren() override;
99 
100   lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) override;
101 
102   lldb::ChildCacheState Update() override;
103 
104   bool MightHaveChildren() override;
105 
106   size_t GetIndexOfChildWithName(ConstString name) override;
107 
108   ~LibcxxSharedPtrSyntheticFrontEnd() override;
109 
110 private:
111   ValueObject *m_cntrl;
112 };
113 
114 class LibcxxUniquePtrSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
115 public:
116   LibcxxUniquePtrSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp);
117 
118   llvm::Expected<uint32_t> CalculateNumChildren() override;
119 
120   lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) override;
121 
122   lldb::ChildCacheState Update() override;
123 
124   bool MightHaveChildren() override;
125 
126   size_t GetIndexOfChildWithName(ConstString name) override;
127 
128   ~LibcxxUniquePtrSyntheticFrontEnd() override;
129 
130 private:
131   lldb::ValueObjectSP m_value_ptr_sp;
132   lldb::ValueObjectSP m_deleter_sp;
133 };
134 
135 SyntheticChildrenFrontEnd *
136 LibcxxBitsetSyntheticFrontEndCreator(CXXSyntheticChildren *,
137                                      lldb::ValueObjectSP);
138 
139 SyntheticChildrenFrontEnd *
140 LibcxxSharedPtrSyntheticFrontEndCreator(CXXSyntheticChildren *,
141                                         lldb::ValueObjectSP);
142 
143 SyntheticChildrenFrontEnd *
144 LibcxxUniquePtrSyntheticFrontEndCreator(CXXSyntheticChildren *,
145                                         lldb::ValueObjectSP);
146 
147 SyntheticChildrenFrontEnd *
148 LibcxxStdVectorSyntheticFrontEndCreator(CXXSyntheticChildren *,
149                                         lldb::ValueObjectSP);
150 
151 SyntheticChildrenFrontEnd *
152 LibcxxStdValarraySyntheticFrontEndCreator(CXXSyntheticChildren *,
153                                           lldb::ValueObjectSP);
154 
155 SyntheticChildrenFrontEnd *
156 LibcxxStdSliceArraySyntheticFrontEndCreator(CXXSyntheticChildren *,
157                                             lldb::ValueObjectSP);
158 
159 SyntheticChildrenFrontEnd *
160 LibcxxStdProxyArraySyntheticFrontEndCreator(CXXSyntheticChildren *,
161                                             lldb::ValueObjectSP);
162 
163 SyntheticChildrenFrontEnd *
164 LibcxxStdListSyntheticFrontEndCreator(CXXSyntheticChildren *,
165                                       lldb::ValueObjectSP);
166 
167 SyntheticChildrenFrontEnd *
168 LibcxxStdForwardListSyntheticFrontEndCreator(CXXSyntheticChildren *,
169                                              lldb::ValueObjectSP);
170 
171 SyntheticChildrenFrontEnd *
172 LibcxxStdMapSyntheticFrontEndCreator(CXXSyntheticChildren *,
173                                      lldb::ValueObjectSP);
174 
175 SyntheticChildrenFrontEnd *
176 LibCxxMapIteratorSyntheticFrontEndCreator(CXXSyntheticChildren *,
177                                           lldb::ValueObjectSP);
178 
179 SyntheticChildrenFrontEnd *
180 LibcxxStdUnorderedMapSyntheticFrontEndCreator(CXXSyntheticChildren *,
181                                               lldb::ValueObjectSP);
182 
183 SyntheticChildrenFrontEnd *
184 LibCxxUnorderedMapIteratorSyntheticFrontEndCreator(CXXSyntheticChildren *,
185                                                    lldb::ValueObjectSP);
186 
187 SyntheticChildrenFrontEnd *
188 LibcxxInitializerListSyntheticFrontEndCreator(CXXSyntheticChildren *,
189                                               lldb::ValueObjectSP);
190 
191 SyntheticChildrenFrontEnd *LibcxxQueueFrontEndCreator(CXXSyntheticChildren *,
192                                                       lldb::ValueObjectSP);
193 
194 SyntheticChildrenFrontEnd *LibcxxTupleFrontEndCreator(CXXSyntheticChildren *,
195                                                       lldb::ValueObjectSP);
196 
197 SyntheticChildrenFrontEnd *
198 LibcxxOptionalSyntheticFrontEndCreator(CXXSyntheticChildren *,
199                                        lldb::ValueObjectSP valobj_sp);
200 
201 SyntheticChildrenFrontEnd *
202 LibcxxVariantFrontEndCreator(CXXSyntheticChildren *,
203                              lldb::ValueObjectSP valobj_sp);
204 
205 SyntheticChildrenFrontEnd *
206 LibcxxStdSpanSyntheticFrontEndCreator(CXXSyntheticChildren *,
207                                       lldb::ValueObjectSP);
208 
209 SyntheticChildrenFrontEnd *
210 LibcxxStdRangesRefViewSyntheticFrontEndCreator(CXXSyntheticChildren *,
211                                                lldb::ValueObjectSP);
212 
213 bool LibcxxChronoSysSecondsSummaryProvider(
214     ValueObject &valobj, Stream &stream,
215     const TypeSummaryOptions &options); // libc++ std::chrono::sys_seconds
216 
217 bool LibcxxChronoSysDaysSummaryProvider(
218     ValueObject &valobj, Stream &stream,
219     const TypeSummaryOptions &options); // libc++ std::chrono::sys_days
220 
221 bool LibcxxChronoLocalSecondsSummaryProvider(
222     ValueObject &valobj, Stream &stream,
223     const TypeSummaryOptions &options); // libc++ std::chrono::local_seconds
224 
225 bool LibcxxChronoLocalDaysSummaryProvider(
226     ValueObject &valobj, Stream &stream,
227     const TypeSummaryOptions &options); // libc++ std::chrono::local_days
228 
229 bool LibcxxChronoMonthSummaryProvider(
230     ValueObject &valobj, Stream &stream,
231     const TypeSummaryOptions &options); // libc++ std::chrono::month
232 
233 bool LibcxxChronoWeekdaySummaryProvider(
234     ValueObject &valobj, Stream &stream,
235     const TypeSummaryOptions &options); // libc++ std::chrono::weekday
236 
237 bool LibcxxChronoYearMonthDaySummaryProvider(
238     ValueObject &valobj, Stream &stream,
239     const TypeSummaryOptions &options); // libc++ std::chrono::year_month_day
240 
241 } // namespace formatters
242 } // namespace lldb_private
243 
244 #endif // LLDB_SOURCE_PLUGINS_LANGUAGE_CPLUSPLUS_LIBCXX_H
245