xref: /NextBSD/contrib/llvm/tools/lldb/include/lldb/DataFormatters/CXXFormatterFunctions.h (revision 84d351007654069f9643c8e4b4802a7f5f08ee42)
1 //===-- CXXFormatterFunctions.h------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef liblldb_CXXFormatterFunctions_h_
11 #define liblldb_CXXFormatterFunctions_h_
12 
13 #include <stdint.h>
14 #include <time.h>
15 
16 #include "lldb/lldb-forward.h"
17 
18 #include "lldb/Core/ConstString.h"
19 #include "lldb/DataFormatters/FormatClasses.h"
20 #include "lldb/DataFormatters/TypeSynthetic.h"
21 #include "lldb/DataFormatters/VectorType.h"
22 #include "lldb/Target/ExecutionContext.h"
23 #include "lldb/Target/ObjCLanguageRuntime.h"
24 #include "lldb/Target/Target.h"
25 
26 #include "clang/AST/ASTContext.h"
27 
28 namespace lldb_private {
29     namespace formatters
30     {
31         StackFrame*
32         GetViableFrame (ExecutionContext exe_ctx);
33 
34         bool
35         ExtractValueFromObjCExpression (ValueObject &valobj,
36                                         const char* target_type,
37                                         const char* selector,
38                                         uint64_t &value);
39 
40         bool
41         ExtractSummaryFromObjCExpression (ValueObject &valobj,
42                                           const char* target_type,
43                                           const char* selector,
44                                           Stream &stream);
45 
46         lldb::ValueObjectSP
47         CallSelectorOnObject (ValueObject &valobj,
48                               const char* return_type,
49                               const char* selector,
50                               uint64_t index);
51 
52         lldb::ValueObjectSP
53         CallSelectorOnObject (ValueObject &valobj,
54                               const char* return_type,
55                               const char* selector,
56                               const char* key);
57 
58         size_t
59         ExtractIndexFromString (const char* item_name);
60 
61         time_t
62         GetOSXEpoch ();
63 
64         bool
65         FunctionPointerSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options); // C++ function pointer
66 
67         bool
68         Char16StringSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options); // char16_t* and unichar*
69 
70         bool
71         Char32StringSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options); // char32_t*
72 
73         bool
74         WCharStringSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options); // wchar_t*
75 
76         bool
77         Char16SummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options); // char16_t and unichar
78 
79         bool
80         Char32SummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options); // char32_t
81 
82         bool
83         WCharSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options); // wchar_t
84 
85         bool
86         LibcxxStringSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options); // libc++ std::string
87 
88         bool
89         LibcxxWStringSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options); // libc++ std::wstring
90 
91         bool
92         LibcxxSmartPointerSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options); // libc++ std::shared_ptr<> and std::weak_ptr<>
93 
94         bool
95         ObjCClassSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
96 
97         SyntheticChildrenFrontEnd* ObjCClassSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
98 
99         template<bool name_entries>
100         bool
101         NSDictionarySummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
102 
103         bool
104         NSIndexSetSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
105 
106         bool
107         NSArraySummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
108 
109         template<bool cf_style>
110         bool
111         NSSetSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
112 
113         template<bool needs_at>
114         bool
115         NSDataSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
116 
117         bool
118         NSNumberSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
119 
120         bool
121         NSNotificationSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
122 
123         bool
124         NSTimeZoneSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
125 
126         bool
127         NSMachPortSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
128 
129         bool
130         CFBagSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
131 
132         bool
133         CFBinaryHeapSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
134 
135         bool
136         CFBitVectorSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
137 
138         bool
139         NSDateSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
140 
141         bool
142         CFAbsoluteTimeSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
143 
144         bool
145         NSBundleSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
146 
147         bool
148         NSStringSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
149 
150         bool
151         NSTaggedString_SummaryProvider (ObjCLanguageRuntime::ClassDescriptorSP descriptor, Stream& stream);
152 
153         bool
154         NSAttributedStringSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
155 
156         bool
157         NSMutableAttributedStringSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
158 
159         bool
160         NSURLSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
161 
162         bool
163         ObjCBOOLSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
164 
165         template <bool is_sel_ptr>
166         bool
167         ObjCSELSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
168 
169         bool
170         RuntimeSpecificDescriptionSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
171 
172         extern template bool
173         NSDictionarySummaryProvider<true> (ValueObject&, Stream&, const TypeSummaryOptions&) ;
174 
175         extern template bool
176         NSDictionarySummaryProvider<false> (ValueObject&, Stream&, const TypeSummaryOptions&) ;
177 
178         extern template bool
179         NSDataSummaryProvider<true> (ValueObject&, Stream&, const TypeSummaryOptions&) ;
180 
181         extern template bool
182         NSDataSummaryProvider<false> (ValueObject&, Stream&, const TypeSummaryOptions&) ;
183 
184         extern template bool
185         ObjCSELSummaryProvider<true> (ValueObject&, Stream&, const TypeSummaryOptions&);
186 
187         extern template bool
188         ObjCSELSummaryProvider<false> (ValueObject&, Stream&, const TypeSummaryOptions&);
189 
190         bool
191         CMTimeSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
192 
193         SyntheticChildrenFrontEnd* NSArraySyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
194 
195         SyntheticChildrenFrontEnd* NSDictionarySyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
196 
197         SyntheticChildrenFrontEnd* NSSetSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
198 
199         SyntheticChildrenFrontEnd* NSIndexPathSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
200 
201         class LibcxxVectorBoolSyntheticFrontEnd : public SyntheticChildrenFrontEnd
202         {
203         public:
204             LibcxxVectorBoolSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp);
205 
206             virtual size_t
207             CalculateNumChildren ();
208 
209             virtual lldb::ValueObjectSP
210             GetChildAtIndex (size_t idx);
211 
212             virtual bool
213             Update();
214 
215             virtual bool
216             MightHaveChildren ();
217 
218             virtual size_t
219             GetIndexOfChildWithName (const ConstString &name);
220 
221             virtual
222             ~LibcxxVectorBoolSyntheticFrontEnd ();
223         private:
224             ClangASTType m_bool_type;
225             ExecutionContextRef m_exe_ctx_ref;
226             uint64_t m_count;
227             lldb::addr_t m_base_data_address;
228             std::map<size_t,lldb::ValueObjectSP> m_children;
229         };
230 
231         SyntheticChildrenFrontEnd* LibcxxVectorBoolSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
232 
233         bool
234         LibcxxContainerSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options);
235 
236         class LibstdcppMapIteratorSyntheticFrontEnd : public SyntheticChildrenFrontEnd
237         {
238         public:
239             LibstdcppMapIteratorSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp);
240 
241             virtual size_t
242             CalculateNumChildren ();
243 
244             virtual lldb::ValueObjectSP
245             GetChildAtIndex (size_t idx);
246 
247             virtual bool
248             Update();
249 
250             virtual bool
251             MightHaveChildren ();
252 
253             virtual size_t
254             GetIndexOfChildWithName (const ConstString &name);
255 
256             virtual
257             ~LibstdcppMapIteratorSyntheticFrontEnd ();
258         private:
259             ExecutionContextRef m_exe_ctx_ref;
260             lldb::addr_t m_pair_address;
261             ClangASTType m_pair_type;
262             EvaluateExpressionOptions m_options;
263             lldb::ValueObjectSP m_pair_sp;
264         };
265 
266         SyntheticChildrenFrontEnd* LibstdcppMapIteratorSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
267 
268         class LibCxxMapIteratorSyntheticFrontEnd : public SyntheticChildrenFrontEnd
269         {
270         public:
271             LibCxxMapIteratorSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp);
272 
273             virtual size_t
274             CalculateNumChildren ();
275 
276             virtual lldb::ValueObjectSP
277             GetChildAtIndex (size_t idx);
278 
279             virtual bool
280             Update();
281 
282             virtual bool
283             MightHaveChildren ();
284 
285             virtual size_t
286             GetIndexOfChildWithName (const ConstString &name);
287 
288             virtual
289             ~LibCxxMapIteratorSyntheticFrontEnd ();
290         private:
291             ValueObject *m_pair_ptr;
292         };
293 
294         SyntheticChildrenFrontEnd* LibCxxMapIteratorSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
295 
296         class VectorIteratorSyntheticFrontEnd : public SyntheticChildrenFrontEnd
297         {
298         public:
299             VectorIteratorSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp,
300                                              ConstString item_name);
301 
302             virtual size_t
303             CalculateNumChildren ();
304 
305             virtual lldb::ValueObjectSP
306             GetChildAtIndex (size_t idx);
307 
308             virtual bool
309             Update();
310 
311             virtual bool
312             MightHaveChildren ();
313 
314             virtual size_t
315             GetIndexOfChildWithName (const ConstString &name);
316 
317             virtual
318             ~VectorIteratorSyntheticFrontEnd ();
319         private:
320             ExecutionContextRef m_exe_ctx_ref;
321             ConstString m_item_name;
322             lldb::ValueObjectSP m_item_sp;
323         };
324 
325         SyntheticChildrenFrontEnd* LibCxxVectorIteratorSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
326 
327         SyntheticChildrenFrontEnd* LibStdcppVectorIteratorSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
328 
329         class LibcxxSharedPtrSyntheticFrontEnd : public SyntheticChildrenFrontEnd
330         {
331         public:
332             LibcxxSharedPtrSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp);
333 
334             virtual size_t
335             CalculateNumChildren ();
336 
337             virtual lldb::ValueObjectSP
338             GetChildAtIndex (size_t idx);
339 
340             virtual bool
341             Update();
342 
343             virtual bool
344             MightHaveChildren ();
345 
346             virtual size_t
347             GetIndexOfChildWithName (const ConstString &name);
348 
349             virtual
350             ~LibcxxSharedPtrSyntheticFrontEnd ();
351         private:
352             ValueObject* m_cntrl;
353             lldb::ValueObjectSP m_count_sp;
354             lldb::ValueObjectSP m_weak_count_sp;
355             uint8_t m_ptr_size;
356             lldb::ByteOrder m_byte_order;
357         };
358 
359         SyntheticChildrenFrontEnd* LibcxxSharedPtrSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
360 
361         SyntheticChildrenFrontEnd* LibcxxStdVectorSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
362 
363         SyntheticChildrenFrontEnd* LibcxxStdListSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
364 
365         SyntheticChildrenFrontEnd* LibcxxStdMapSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
366 
367         SyntheticChildrenFrontEnd* LibcxxStdUnorderedMapSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
368 
369         SyntheticChildrenFrontEnd* LibcxxInitializerListSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
370 
371         SyntheticChildrenFrontEnd* VectorTypeSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP);
372     } // namespace formatters
373 } // namespace lldb_private
374 
375 #endif // liblldb_CXXFormatterFunctions_h_
376