Coverage Report

Created: 2023-09-21 18:56

/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h
Line
Count
Source
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 LibcxxSmartPointerSummaryProvider(
63
    ValueObject &valobj, Stream &stream,
64
    const TypeSummaryOptions
65
        &options); // libc++ std::shared_ptr<> and std::weak_ptr<>
66
67
// libc++ std::unique_ptr<>
68
bool LibcxxUniquePointerSummaryProvider(ValueObject &valobj, Stream &stream,
69
                                        const TypeSummaryOptions &options);
70
71
bool LibcxxFunctionSummaryProvider(
72
    ValueObject &valobj, Stream &stream,
73
    const TypeSummaryOptions &options); // libc++ std::function<>
74
75
SyntheticChildrenFrontEnd *
76
LibcxxVectorBoolSyntheticFrontEndCreator(CXXSyntheticChildren *,
77
                                         lldb::ValueObjectSP);
78
79
bool LibcxxContainerSummaryProvider(ValueObject &valobj, Stream &stream,
80
                                    const TypeSummaryOptions &options);
81
82
/// Formatter for libc++ std::span<>.
83
bool LibcxxSpanSummaryProvider(ValueObject &valobj, Stream &stream,
84
                               const TypeSummaryOptions &options);
85
86
class LibCxxMapIteratorSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
87
public:
88
  LibCxxMapIteratorSyntheticFrontEnd(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
  ~LibCxxMapIteratorSyntheticFrontEnd() override;
101
102
private:
103
  ValueObject *m_pair_ptr;
104
  lldb::ValueObjectSP m_pair_sp;
105
};
106
107
SyntheticChildrenFrontEnd *
108
LibCxxMapIteratorSyntheticFrontEndCreator(CXXSyntheticChildren *,
109
                                          lldb::ValueObjectSP);
110
111
/// Formats libcxx's std::unordered_map iterators
112
///
113
/// In raw form a std::unordered_map::iterator is represented as follows:
114
///
115
/// (lldb) var it --raw --ptr-depth 1
116
/// (std::__1::__hash_map_iterator<
117
///    std::__1::__hash_iterator<
118
///      std::__1::__hash_node<
119
///        std::__1::__hash_value_type<
120
///            std::__1::basic_string<char, std::__1::char_traits<char>,
121
///            std::__1::allocator<char> >, std::__1::basic_string<char,
122
///            std::__1::char_traits<char>, std::__1::allocator<char> > >,
123
///        void *> *> >)
124
///  it = {
125
///   __i_ = {
126
///     __node_ = 0x0000600001700040 {
127
///       __next_ = 0x0000600001704000
128
///     }
129
///   }
130
/// }
131
class LibCxxUnorderedMapIteratorSyntheticFrontEnd
132
    : public SyntheticChildrenFrontEnd {
133
public:
134
  LibCxxUnorderedMapIteratorSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp);
135
136
14
  ~LibCxxUnorderedMapIteratorSyntheticFrontEnd() override = default;
137
138
  size_t CalculateNumChildren() override;
139
140
  lldb::ValueObjectSP GetChildAtIndex(size_t idx) override;
141
142
  bool Update() override;
143
144
  bool MightHaveChildren() override;
145
146
  size_t GetIndexOfChildWithName(ConstString name) override;
147
148
private:
149
  ValueObject *m_iter_ptr = nullptr; ///< Held, not owned. Child of iterator
150
                                     ///< ValueObject supplied at construction.
151
152
  lldb::ValueObjectSP m_pair_sp; ///< ValueObject for the key/value pair
153
                                 ///< that the iterator currently points
154
                                 ///< to.
155
};
156
157
SyntheticChildrenFrontEnd *
158
LibCxxUnorderedMapIteratorSyntheticFrontEndCreator(CXXSyntheticChildren *,
159
                                                   lldb::ValueObjectSP);
160
161
SyntheticChildrenFrontEnd *
162
LibCxxVectorIteratorSyntheticFrontEndCreator(CXXSyntheticChildren *,
163
                                             lldb::ValueObjectSP);
164
165
class LibcxxSharedPtrSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
166
public:
167
  LibcxxSharedPtrSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp);
168
169
  size_t CalculateNumChildren() override;
170
171
  lldb::ValueObjectSP GetChildAtIndex(size_t idx) override;
172
173
  bool Update() override;
174
175
  bool MightHaveChildren() override;
176
177
  size_t GetIndexOfChildWithName(ConstString name) override;
178
179
  ~LibcxxSharedPtrSyntheticFrontEnd() override;
180
181
private:
182
  ValueObject *m_cntrl;
183
};
184
185
class LibcxxUniquePtrSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
186
public:
187
  LibcxxUniquePtrSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp);
188
189
  size_t CalculateNumChildren() override;
190
191
  lldb::ValueObjectSP GetChildAtIndex(size_t idx) override;
192
193
  bool Update() override;
194
195
  bool MightHaveChildren() override;
196
197
  size_t GetIndexOfChildWithName(ConstString name) override;
198
199
  ~LibcxxUniquePtrSyntheticFrontEnd() override;
200
201
private:
202
  lldb::ValueObjectSP m_value_ptr_sp;
203
  lldb::ValueObjectSP m_deleter_sp;
204
};
205
206
SyntheticChildrenFrontEnd *
207
LibcxxBitsetSyntheticFrontEndCreator(CXXSyntheticChildren *,
208
                                     lldb::ValueObjectSP);
209
210
SyntheticChildrenFrontEnd *
211
LibcxxSharedPtrSyntheticFrontEndCreator(CXXSyntheticChildren *,
212
                                        lldb::ValueObjectSP);
213
214
SyntheticChildrenFrontEnd *
215
LibcxxUniquePtrSyntheticFrontEndCreator(CXXSyntheticChildren *,
216
                                        lldb::ValueObjectSP);
217
218
SyntheticChildrenFrontEnd *
219
LibcxxStdVectorSyntheticFrontEndCreator(CXXSyntheticChildren *,
220
                                        lldb::ValueObjectSP);
221
222
SyntheticChildrenFrontEnd *
223
LibcxxStdListSyntheticFrontEndCreator(CXXSyntheticChildren *,
224
                                      lldb::ValueObjectSP);
225
226
SyntheticChildrenFrontEnd *
227
LibcxxStdForwardListSyntheticFrontEndCreator(CXXSyntheticChildren *,
228
                                             lldb::ValueObjectSP);
229
230
SyntheticChildrenFrontEnd *
231
LibcxxStdMapSyntheticFrontEndCreator(CXXSyntheticChildren *,
232
                                     lldb::ValueObjectSP);
233
234
SyntheticChildrenFrontEnd *
235
LibcxxStdUnorderedMapSyntheticFrontEndCreator(CXXSyntheticChildren *,
236
                                              lldb::ValueObjectSP);
237
238
SyntheticChildrenFrontEnd *
239
LibcxxInitializerListSyntheticFrontEndCreator(CXXSyntheticChildren *,
240
                                              lldb::ValueObjectSP);
241
242
SyntheticChildrenFrontEnd *LibcxxQueueFrontEndCreator(CXXSyntheticChildren *,
243
                                                      lldb::ValueObjectSP);
244
245
SyntheticChildrenFrontEnd *LibcxxTupleFrontEndCreator(CXXSyntheticChildren *,
246
                                                      lldb::ValueObjectSP);
247
248
SyntheticChildrenFrontEnd *
249
LibcxxOptionalSyntheticFrontEndCreator(CXXSyntheticChildren *,
250
                                       lldb::ValueObjectSP valobj_sp);
251
252
SyntheticChildrenFrontEnd *
253
LibcxxVariantFrontEndCreator(CXXSyntheticChildren *,
254
                             lldb::ValueObjectSP valobj_sp);
255
256
SyntheticChildrenFrontEnd *
257
LibcxxStdSpanSyntheticFrontEndCreator(CXXSyntheticChildren *,
258
                                      lldb::ValueObjectSP);
259
260
SyntheticChildrenFrontEnd *
261
LibcxxStdRangesRefViewSyntheticFrontEndCreator(CXXSyntheticChildren *,
262
                                               lldb::ValueObjectSP);
263
264
} // namespace formatters
265
} // namespace lldb_private
266
267
#endif // LLDB_SOURCE_PLUGINS_LANGUAGE_CPLUSPLUS_LIBCXX_H