blob: c4540b5210cf5ee276902bce3576c95eb27a0414 [file] [log] [blame]
Greg Clayton4a33d312011-06-23 17:59:56 +00001//===-- FormatManager.cpp -------------------------------------------*- 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
Daniel Malea93a64302012-12-05 00:20:57 +000010#include "lldb/lldb-python.h"
11
Enrico Granata5548cb52013-01-28 23:47:25 +000012#include "lldb/DataFormatters/FormatManager.h"
Greg Clayton4a33d312011-06-23 17:59:56 +000013
14// C Includes
15// C++ Includes
16// Other libraries and framework includes
17// Project includes
18
Enrico Granataf2bbf712011-07-15 02:26:42 +000019#include "lldb/Core/Debugger.h"
Enrico Granata5548cb52013-01-28 23:47:25 +000020#include "lldb/DataFormatters/CXXFormatterFunctions.h"
21#include "lldb/Interpreter/ScriptInterpreterPython.h"
22#include "lldb/Target/ExecutionContext.h"
23#include "lldb/Target/Platform.h"
Enrico Granataf2bbf712011-07-15 02:26:42 +000024
Greg Clayton4a33d312011-06-23 17:59:56 +000025using namespace lldb;
26using namespace lldb_private;
27
Greg Claytonbb7f31f2011-06-23 21:22:24 +000028
29struct FormatInfo
30{
31 Format format;
32 const char format_char; // One or more format characters that can be used for this format.
33 const char *format_name; // Long format name that can be used to specify the current format
34};
35
36static FormatInfo
37g_format_infos[] =
38{
39 { eFormatDefault , '\0' , "default" },
40 { eFormatBoolean , 'B' , "boolean" },
41 { eFormatBinary , 'b' , "binary" },
42 { eFormatBytes , 'y' , "bytes" },
43 { eFormatBytesWithASCII , 'Y' , "bytes with ASCII" },
44 { eFormatChar , 'c' , "character" },
45 { eFormatCharPrintable , 'C' , "printable character" },
46 { eFormatComplexFloat , 'F' , "complex float" },
47 { eFormatCString , 's' , "c-string" },
Greg Clayton5009f9d2011-10-27 17:55:14 +000048 { eFormatDecimal , 'd' , "decimal" },
Greg Claytonbb7f31f2011-06-23 21:22:24 +000049 { eFormatEnum , 'E' , "enumeration" },
50 { eFormatHex , 'x' , "hex" },
Enrico Granata7ec18e32012-08-09 19:33:34 +000051 { eFormatHexUppercase , 'X' , "uppercase hex" },
Greg Claytonbb7f31f2011-06-23 21:22:24 +000052 { eFormatFloat , 'f' , "float" },
53 { eFormatOctal , 'o' , "octal" },
54 { eFormatOSType , 'O' , "OSType" },
55 { eFormatUnicode16 , 'U' , "unicode16" },
56 { eFormatUnicode32 , '\0' , "unicode32" },
57 { eFormatUnsigned , 'u' , "unsigned decimal" },
58 { eFormatPointer , 'p' , "pointer" },
59 { eFormatVectorOfChar , '\0' , "char[]" },
60 { eFormatVectorOfSInt8 , '\0' , "int8_t[]" },
61 { eFormatVectorOfUInt8 , '\0' , "uint8_t[]" },
62 { eFormatVectorOfSInt16 , '\0' , "int16_t[]" },
63 { eFormatVectorOfUInt16 , '\0' , "uint16_t[]" },
Enrico Granatae443ba72011-07-06 15:56:06 +000064 { eFormatVectorOfSInt32 , '\0' , "int32_t[]" },
65 { eFormatVectorOfUInt32 , '\0' , "uint32_t[]" },
66 { eFormatVectorOfSInt64 , '\0' , "int64_t[]" },
67 { eFormatVectorOfUInt64 , '\0' , "uint64_t[]" },
Greg Claytonbb7f31f2011-06-23 21:22:24 +000068 { eFormatVectorOfFloat32, '\0' , "float32[]" },
69 { eFormatVectorOfFloat64, '\0' , "float64[]" },
70 { eFormatVectorOfUInt128, '\0' , "uint128_t[]" },
71 { eFormatComplexInteger , 'I' , "complex integer" },
Greg Clayton5009f9d2011-10-27 17:55:14 +000072 { eFormatCharArray , 'a' , "character array" },
73 { eFormatAddressInfo , 'A' , "address" },
Enrico Granata7ec18e32012-08-09 19:33:34 +000074 { eFormatHexFloat , '\0' , "hex float" },
Sean Callananbf154da2012-08-08 17:35:10 +000075 { eFormatInstruction , 'i' , "instruction" },
76 { eFormatVoid , 'v' , "void" }
Greg Claytonbb7f31f2011-06-23 21:22:24 +000077};
78
79static uint32_t
80g_num_format_infos = sizeof(g_format_infos)/sizeof(FormatInfo);
81
82static bool
83GetFormatFromFormatChar (char format_char, Format &format)
84{
85 for (uint32_t i=0; i<g_num_format_infos; ++i)
86 {
87 if (g_format_infos[i].format_char == format_char)
88 {
89 format = g_format_infos[i].format;
90 return true;
91 }
92 }
93 format = eFormatInvalid;
94 return false;
95}
96
97static bool
98GetFormatFromFormatName (const char *format_name, bool partial_match_ok, Format &format)
99{
100 uint32_t i;
101 for (i=0; i<g_num_format_infos; ++i)
102 {
103 if (strcasecmp (g_format_infos[i].format_name, format_name) == 0)
104 {
105 format = g_format_infos[i].format;
106 return true;
107 }
108 }
109
110 if (partial_match_ok)
111 {
112 for (i=0; i<g_num_format_infos; ++i)
113 {
114 if (strcasestr (g_format_infos[i].format_name, format_name) == g_format_infos[i].format_name)
115 {
116 format = g_format_infos[i].format;
117 return true;
118 }
119 }
120 }
121 format = eFormatInvalid;
122 return false;
123}
124
125bool
126FormatManager::GetFormatFromCString (const char *format_cstr,
127 bool partial_match_ok,
128 lldb::Format &format)
129{
130 bool success = false;
131 if (format_cstr && format_cstr[0])
132 {
133 if (format_cstr[1] == '\0')
134 {
135 success = GetFormatFromFormatChar (format_cstr[0], format);
136 if (success)
137 return true;
138 }
139
140 success = GetFormatFromFormatName (format_cstr, partial_match_ok, format);
141 }
142 if (!success)
143 format = eFormatInvalid;
144 return success;
145}
146
147char
148FormatManager::GetFormatAsFormatChar (lldb::Format format)
149{
150 for (uint32_t i=0; i<g_num_format_infos; ++i)
151 {
152 if (g_format_infos[i].format == format)
153 return g_format_infos[i].format_char;
154 }
155 return '\0';
156}
Greg Claytonbb7f31f2011-06-23 21:22:24 +0000157
158const char *
159FormatManager::GetFormatAsCString (Format format)
160{
161 if (format >= eFormatDefault && format < kNumFormats)
162 return g_format_infos[format].format_name;
163 return NULL;
164}
Enrico Granata0a3958e2011-07-02 00:25:22 +0000165
Enrico Granata852cc952013-10-08 19:03:22 +0000166lldb::TypeFormatImplSP
167FormatManager::GetFormatForType (lldb::TypeNameSpecifierImplSP type_sp)
168{
169 if (!type_sp)
170 return lldb::TypeFormatImplSP();
171 lldb::TypeFormatImplSP format_chosen_sp;
172 uint32_t num_categories = m_categories_map.GetCount();
173 lldb::TypeCategoryImplSP category_sp;
174 uint32_t prio_category = UINT32_MAX;
175 for (uint32_t category_id = 0;
176 category_id < num_categories;
177 category_id++)
178 {
179 category_sp = GetCategoryAtIndex(category_id);
180 if (category_sp->IsEnabled() == false)
181 continue;
182 lldb::TypeFormatImplSP format_current_sp = category_sp->GetFormatForType(type_sp);
183 if (format_current_sp && (format_chosen_sp.get() == NULL || (prio_category > category_sp->GetEnabledPosition())))
184 {
185 prio_category = category_sp->GetEnabledPosition();
186 format_chosen_sp = format_current_sp;
187 }
188 }
189 return format_chosen_sp;
190}
191
Enrico Granataa777dc22012-05-08 21:49:57 +0000192lldb::TypeSummaryImplSP
193FormatManager::GetSummaryForType (lldb::TypeNameSpecifierImplSP type_sp)
194{
195 if (!type_sp)
196 return lldb::TypeSummaryImplSP();
197 lldb::TypeSummaryImplSP summary_chosen_sp;
198 uint32_t num_categories = m_categories_map.GetCount();
199 lldb::TypeCategoryImplSP category_sp;
200 uint32_t prio_category = UINT32_MAX;
201 for (uint32_t category_id = 0;
202 category_id < num_categories;
203 category_id++)
204 {
205 category_sp = GetCategoryAtIndex(category_id);
206 if (category_sp->IsEnabled() == false)
207 continue;
208 lldb::TypeSummaryImplSP summary_current_sp = category_sp->GetSummaryForType(type_sp);
209 if (summary_current_sp && (summary_chosen_sp.get() == NULL || (prio_category > category_sp->GetEnabledPosition())))
210 {
211 prio_category = category_sp->GetEnabledPosition();
212 summary_chosen_sp = summary_current_sp;
213 }
214 }
215 return summary_chosen_sp;
216}
217
218lldb::TypeFilterImplSP
219FormatManager::GetFilterForType (lldb::TypeNameSpecifierImplSP type_sp)
220{
221 if (!type_sp)
222 return lldb::TypeFilterImplSP();
223 lldb::TypeFilterImplSP filter_chosen_sp;
224 uint32_t num_categories = m_categories_map.GetCount();
225 lldb::TypeCategoryImplSP category_sp;
226 uint32_t prio_category = UINT32_MAX;
227 for (uint32_t category_id = 0;
228 category_id < num_categories;
229 category_id++)
230 {
231 category_sp = GetCategoryAtIndex(category_id);
232 if (category_sp->IsEnabled() == false)
233 continue;
234 lldb::TypeFilterImplSP filter_current_sp((TypeFilterImpl*)category_sp->GetFilterForType(type_sp).get());
235 if (filter_current_sp && (filter_chosen_sp.get() == NULL || (prio_category > category_sp->GetEnabledPosition())))
236 {
237 prio_category = category_sp->GetEnabledPosition();
238 filter_chosen_sp = filter_current_sp;
239 }
240 }
241 return filter_chosen_sp;
242}
243
Jason Molenda7a9a72b2012-05-16 00:38:08 +0000244#ifndef LLDB_DISABLE_PYTHON
Enrico Granata5548cb52013-01-28 23:47:25 +0000245lldb::ScriptedSyntheticChildrenSP
Enrico Granataa777dc22012-05-08 21:49:57 +0000246FormatManager::GetSyntheticForType (lldb::TypeNameSpecifierImplSP type_sp)
247{
248 if (!type_sp)
Enrico Granata5548cb52013-01-28 23:47:25 +0000249 return lldb::ScriptedSyntheticChildrenSP();
250 lldb::ScriptedSyntheticChildrenSP synth_chosen_sp;
Enrico Granataa777dc22012-05-08 21:49:57 +0000251 uint32_t num_categories = m_categories_map.GetCount();
252 lldb::TypeCategoryImplSP category_sp;
253 uint32_t prio_category = UINT32_MAX;
254 for (uint32_t category_id = 0;
255 category_id < num_categories;
256 category_id++)
257 {
258 category_sp = GetCategoryAtIndex(category_id);
259 if (category_sp->IsEnabled() == false)
260 continue;
Enrico Granata5548cb52013-01-28 23:47:25 +0000261 lldb::ScriptedSyntheticChildrenSP synth_current_sp((ScriptedSyntheticChildren*)category_sp->GetSyntheticForType(type_sp).get());
Enrico Granataa777dc22012-05-08 21:49:57 +0000262 if (synth_current_sp && (synth_chosen_sp.get() == NULL || (prio_category > category_sp->GetEnabledPosition())))
263 {
264 prio_category = category_sp->GetEnabledPosition();
265 synth_chosen_sp = synth_current_sp;
266 }
267 }
268 return synth_chosen_sp;
269}
Jason Molenda7a9a72b2012-05-16 00:38:08 +0000270#endif
Enrico Granataa777dc22012-05-08 21:49:57 +0000271
Jason Molenda7a9a72b2012-05-16 00:38:08 +0000272#ifndef LLDB_DISABLE_PYTHON
Enrico Granataa777dc22012-05-08 21:49:57 +0000273lldb::SyntheticChildrenSP
274FormatManager::GetSyntheticChildrenForType (lldb::TypeNameSpecifierImplSP type_sp)
275{
276 if (!type_sp)
277 return lldb::SyntheticChildrenSP();
278 lldb::TypeFilterImplSP filter_sp = GetFilterForType(type_sp);
Enrico Granata5548cb52013-01-28 23:47:25 +0000279 lldb::ScriptedSyntheticChildrenSP synth_sp = GetSyntheticForType(type_sp);
Enrico Granataa777dc22012-05-08 21:49:57 +0000280 if (filter_sp->GetRevision() > synth_sp->GetRevision())
281 return lldb::SyntheticChildrenSP(filter_sp.get());
282 else
283 return lldb::SyntheticChildrenSP(synth_sp.get());
284}
Jason Molenda7a9a72b2012-05-16 00:38:08 +0000285#endif
Enrico Granataa777dc22012-05-08 21:49:57 +0000286
Enrico Granata061858c2012-02-15 02:34:21 +0000287lldb::TypeCategoryImplSP
Enrico Granata9128ee22011-09-06 19:20:51 +0000288FormatManager::GetCategory (const ConstString& category_name,
Enrico Granatadc940732011-08-23 00:32:52 +0000289 bool can_create)
290{
291 if (!category_name)
Enrico Granata9128ee22011-09-06 19:20:51 +0000292 return GetCategory(m_default_category_name);
Enrico Granata061858c2012-02-15 02:34:21 +0000293 lldb::TypeCategoryImplSP category;
Enrico Granatadc940732011-08-23 00:32:52 +0000294 if (m_categories_map.Get(category_name, category))
295 return category;
296
297 if (!can_create)
Enrico Granata061858c2012-02-15 02:34:21 +0000298 return lldb::TypeCategoryImplSP();
Enrico Granatadc940732011-08-23 00:32:52 +0000299
Enrico Granata061858c2012-02-15 02:34:21 +0000300 m_categories_map.Add(category_name,lldb::TypeCategoryImplSP(new TypeCategoryImpl(this, category_name)));
Enrico Granata9128ee22011-09-06 19:20:51 +0000301 return GetCategory(category_name);
Enrico Granatadc940732011-08-23 00:32:52 +0000302}
303
Enrico Granataf4efecd2011-07-12 22:56:10 +0000304lldb::Format
305FormatManager::GetSingleItemFormat(lldb::Format vector_format)
306{
307 switch(vector_format)
308 {
309 case eFormatVectorOfChar:
310 return eFormatCharArray;
311
312 case eFormatVectorOfSInt8:
313 case eFormatVectorOfSInt16:
314 case eFormatVectorOfSInt32:
315 case eFormatVectorOfSInt64:
316 return eFormatDecimal;
317
318 case eFormatVectorOfUInt8:
319 case eFormatVectorOfUInt16:
320 case eFormatVectorOfUInt32:
321 case eFormatVectorOfUInt64:
322 case eFormatVectorOfUInt128:
323 return eFormatHex;
324
325 case eFormatVectorOfFloat32:
326 case eFormatVectorOfFloat64:
327 return eFormatFloat;
328
329 default:
330 return lldb::eFormatInvalid;
331 }
Greg Clayton3418c852011-08-10 02:10:13 +0000332}
Enrico Granatac482a192011-08-17 22:13:59 +0000333
Enrico Granataa29cb0b2013-10-04 23:14:13 +0000334bool
335FormatManager::ShouldPrintAsOneLiner (ValueObject& valobj)
336{
337 // if this object has a summary, don't try to do anything special to it
338 // if the user wants one-liner, they can ask for it in summary :)
339 if (valobj.GetSummaryFormat().get() != nullptr)
340 return false;
341
342 // no children, no party
343 if (valobj.GetNumChildren() == 0)
344 return false;
345
346 size_t total_children_name_len = 0;
347
348 for (size_t idx = 0;
349 idx < valobj.GetNumChildren();
350 idx++)
351 {
352 ValueObjectSP child_sp(valobj.GetChildAtIndex(idx, true));
353 // something is wrong here - bail out
354 if (!child_sp)
355 return false;
356 // if we decided to define synthetic children for a type, we probably care enough
357 // to show them, but avoid nesting children in children
358 if (child_sp->GetSyntheticChildren().get() != nullptr)
359 return false;
360
361 total_children_name_len += child_sp->GetName().GetLength();
362
363 // 50 itself is a "randomly" chosen number - the idea is that
364 // overly long structs should not get this treatment
365 // FIXME: maybe make this a user-tweakable setting?
366 if (total_children_name_len > 50)
367 return false;
368
369 // if a summary is there..
370 if (child_sp->GetSummaryFormat())
371 {
372 // and it wants children, then bail out
373 if (child_sp->GetSummaryFormat()->DoesPrintChildren())
374 return false;
375 }
376
Enrico Granatac89e4ca2013-10-23 01:34:31 +0000377 // if this child has children..
378 if (child_sp->GetNumChildren())
Enrico Granataa29cb0b2013-10-04 23:14:13 +0000379 {
Enrico Granatac89e4ca2013-10-23 01:34:31 +0000380 // ...and no summary...
381 // (if it had a summary and the summary wanted children, we would have bailed out anyway
382 // so this only makes us bail out if this has no summary and we would then print children)
383 if (!child_sp->GetSummaryFormat())
384 return false; // then bail out
Enrico Granataa29cb0b2013-10-04 23:14:13 +0000385 }
386 }
387 return true;
388}
389
Enrico Granata02b66762011-08-19 01:14:49 +0000390ConstString
391FormatManager::GetValidTypeName (const ConstString& type)
392{
393 return ::GetValidTypeName_Impl(type);
394}
395
Enrico Granata5548cb52013-01-28 23:47:25 +0000396ConstString
397GetTypeForCache (ValueObject& valobj,
398 lldb::DynamicValueType use_dynamic)
399{
400 if (use_dynamic == lldb::eNoDynamicValues)
401 {
402 if (valobj.IsDynamic())
403 {
404 if (valobj.GetStaticValue())
405 return valobj.GetStaticValue()->GetQualifiedTypeName();
406 else
407 return ConstString();
408 }
409 else
410 return valobj.GetQualifiedTypeName();
411 }
412 if (valobj.IsDynamic())
413 return valobj.GetQualifiedTypeName();
414 if (valobj.GetDynamicValue(use_dynamic))
415 return valobj.GetDynamicValue(use_dynamic)->GetQualifiedTypeName();
416 return ConstString();
417}
418
Enrico Granata852cc952013-10-08 19:03:22 +0000419lldb::TypeFormatImplSP
420FormatManager::GetFormat (ValueObject& valobj,
421 lldb::DynamicValueType use_dynamic)
422{
423 TypeFormatImplSP retval;
Enrico Granata52b4b6c2013-10-17 22:27:19 +0000424 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
425 ConstString valobj_type(GetTypeForCache(valobj, use_dynamic));
426 if (valobj_type)
427 {
428 if (log)
429 log->Printf("\n\n[FormatManager::GetFormat] Looking into cache for type %s", valobj_type.AsCString("<invalid>"));
430 if (m_format_cache.GetFormat(valobj_type,retval))
431 {
432 if (log)
433 {
434 log->Printf("[FormatManager::GetFormat] Cache search success. Returning.");
435 if (log->GetDebug())
436 log->Printf("[FormatManager::GetFormat] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses());
437 }
438 return retval;
439 }
440 if (log)
441 log->Printf("[FormatManager::GetFormat] Cache search failed. Going normal route");
442 }
Enrico Granata852cc952013-10-08 19:03:22 +0000443 retval = m_categories_map.GetFormat(valobj, use_dynamic);
Enrico Granata52b4b6c2013-10-17 22:27:19 +0000444 if (valobj_type)
445 {
446 if (log)
447 log->Printf("[FormatManager::GetFormat] Caching %p for type %s",retval.get(),valobj_type.AsCString("<invalid>"));
448 m_format_cache.SetFormat(valobj_type,retval);
449 }
450 if (log && log->GetDebug())
451 log->Printf("[FormatManager::GetFormat] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses());
Enrico Granata852cc952013-10-08 19:03:22 +0000452 return retval;
453}
454
Enrico Granata5548cb52013-01-28 23:47:25 +0000455lldb::TypeSummaryImplSP
456FormatManager::GetSummaryFormat (ValueObject& valobj,
457 lldb::DynamicValueType use_dynamic)
458{
459 TypeSummaryImplSP retval;
Greg Clayton5160ce52013-03-27 23:08:40 +0000460 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
Enrico Granata5548cb52013-01-28 23:47:25 +0000461 ConstString valobj_type(GetTypeForCache(valobj, use_dynamic));
462 if (valobj_type)
463 {
464 if (log)
Enrico Granata68ae4112013-06-18 18:23:07 +0000465 log->Printf("\n\n[FormatManager::GetSummaryFormat] Looking into cache for type %s", valobj_type.AsCString("<invalid>"));
Enrico Granata5548cb52013-01-28 23:47:25 +0000466 if (m_format_cache.GetSummary(valobj_type,retval))
Enrico Granata68ae4112013-06-18 18:23:07 +0000467 {
468 if (log)
469 {
470 log->Printf("[FormatManager::GetSummaryFormat] Cache search success. Returning.");
Enrico Granatac2a96402013-06-26 01:03:38 +0000471 if (log->GetDebug())
Michael Sartain89c862f2013-08-07 19:05:15 +0000472 log->Printf("[FormatManager::GetSummaryFormat] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses());
Enrico Granata68ae4112013-06-18 18:23:07 +0000473 }
Enrico Granata5548cb52013-01-28 23:47:25 +0000474 return retval;
Enrico Granata68ae4112013-06-18 18:23:07 +0000475 }
Enrico Granata5548cb52013-01-28 23:47:25 +0000476 if (log)
477 log->Printf("[FormatManager::GetSummaryFormat] Cache search failed. Going normal route");
478 }
Enrico Granata5548cb52013-01-28 23:47:25 +0000479 retval = m_categories_map.GetSummaryFormat(valobj, use_dynamic);
Enrico Granata5548cb52013-01-28 23:47:25 +0000480 if (valobj_type)
481 {
482 if (log)
483 log->Printf("[FormatManager::GetSummaryFormat] Caching %p for type %s",retval.get(),valobj_type.AsCString("<invalid>"));
484 m_format_cache.SetSummary(valobj_type,retval);
485 }
Enrico Granatac2a96402013-06-26 01:03:38 +0000486 if (log && log->GetDebug())
Michael Sartain89c862f2013-08-07 19:05:15 +0000487 log->Printf("[FormatManager::GetSummaryFormat] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses());
Enrico Granata5548cb52013-01-28 23:47:25 +0000488 return retval;
489}
490
491#ifndef LLDB_DISABLE_PYTHON
492lldb::SyntheticChildrenSP
493FormatManager::GetSyntheticChildren (ValueObject& valobj,
Enrico Granatac2a96402013-06-26 01:03:38 +0000494 lldb::DynamicValueType use_dynamic)
Enrico Granata5548cb52013-01-28 23:47:25 +0000495{
496 SyntheticChildrenSP retval;
Greg Clayton5160ce52013-03-27 23:08:40 +0000497 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
Enrico Granata5548cb52013-01-28 23:47:25 +0000498 ConstString valobj_type(GetTypeForCache(valobj, use_dynamic));
499 if (valobj_type)
500 {
501 if (log)
Enrico Granata68ae4112013-06-18 18:23:07 +0000502 log->Printf("\n\n[FormatManager::GetSyntheticChildren] Looking into cache for type %s", valobj_type.AsCString("<invalid>"));
Enrico Granata5548cb52013-01-28 23:47:25 +0000503 if (m_format_cache.GetSynthetic(valobj_type,retval))
Enrico Granata68ae4112013-06-18 18:23:07 +0000504 {
505 if (log)
506 {
507 log->Printf("[FormatManager::GetSyntheticChildren] Cache search success. Returning.");
Enrico Granatac2a96402013-06-26 01:03:38 +0000508 if (log->GetDebug())
Michael Sartain89c862f2013-08-07 19:05:15 +0000509 log->Printf("[FormatManager::GetSyntheticChildren] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses());
Enrico Granata68ae4112013-06-18 18:23:07 +0000510 }
Enrico Granata5548cb52013-01-28 23:47:25 +0000511 return retval;
Enrico Granata68ae4112013-06-18 18:23:07 +0000512 }
Enrico Granata5548cb52013-01-28 23:47:25 +0000513 if (log)
Enrico Granata68ae4112013-06-18 18:23:07 +0000514 log->Printf("[FormatManager::GetSyntheticChildren] Cache search failed. Going normal route");
Enrico Granata5548cb52013-01-28 23:47:25 +0000515 }
Enrico Granata5548cb52013-01-28 23:47:25 +0000516 retval = m_categories_map.GetSyntheticChildren(valobj, use_dynamic);
Enrico Granata5548cb52013-01-28 23:47:25 +0000517 if (valobj_type)
518 {
519 if (log)
Enrico Granata68ae4112013-06-18 18:23:07 +0000520 log->Printf("[FormatManager::GetSyntheticChildren] Caching %p for type %s",retval.get(),valobj_type.AsCString("<invalid>"));
Enrico Granata5548cb52013-01-28 23:47:25 +0000521 m_format_cache.SetSynthetic(valobj_type,retval);
522 }
Enrico Granatac2a96402013-06-26 01:03:38 +0000523 if (log && log->GetDebug())
Michael Sartain89c862f2013-08-07 19:05:15 +0000524 log->Printf("[FormatManager::GetSyntheticChildren] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses());
Enrico Granata5548cb52013-01-28 23:47:25 +0000525 return retval;
526}
527#endif
Enrico Granata5548cb52013-01-28 23:47:25 +0000528
529FormatManager::FormatManager() :
530 m_format_cache(),
Enrico Granatac482a192011-08-17 22:13:59 +0000531 m_named_summaries_map(this),
532 m_last_revision(0),
533 m_categories_map(this),
Enrico Granata1d887492011-08-22 18:36:52 +0000534 m_default_category_name(ConstString("default")),
535 m_system_category_name(ConstString("system")),
Enrico Granatabac45f62012-01-31 17:01:51 +0000536 m_gnu_cpp_category_name(ConstString("gnu-libstdc++")),
Enrico Granatac7f87302012-03-12 19:47:17 +0000537 m_libcxx_category_name(ConstString("libcxx")),
Enrico Granata864e3e82012-02-17 03:18:30 +0000538 m_objc_category_name(ConstString("objc")),
539 m_corefoundation_category_name(ConstString("CoreFoundation")),
540 m_coregraphics_category_name(ConstString("CoreGraphics")),
541 m_coreservices_category_name(ConstString("CoreServices")),
Enrico Granatad3d444f2012-02-23 23:10:03 +0000542 m_vectortypes_category_name(ConstString("VectorTypes")),
543 m_appkit_category_name(ConstString("AppKit"))
Enrico Granatac482a192011-08-17 22:13:59 +0000544{
Enrico Granata864e3e82012-02-17 03:18:30 +0000545 LoadSystemFormatters();
Enrico Granatae2740882013-01-12 01:22:57 +0000546 LoadLibStdcppFormatters();
Enrico Granatac7f87302012-03-12 19:47:17 +0000547 LoadLibcxxFormatters();
Enrico Granata864e3e82012-02-17 03:18:30 +0000548 LoadObjCFormatters();
549
Enrico Granata5548cb52013-01-28 23:47:25 +0000550 EnableCategory(m_objc_category_name,TypeCategoryMap::Last);
551 EnableCategory(m_corefoundation_category_name,TypeCategoryMap::Last);
552 EnableCategory(m_appkit_category_name,TypeCategoryMap::Last);
553 EnableCategory(m_coreservices_category_name,TypeCategoryMap::Last);
554 EnableCategory(m_coregraphics_category_name,TypeCategoryMap::Last);
555 EnableCategory(m_gnu_cpp_category_name,TypeCategoryMap::Last);
556 EnableCategory(m_libcxx_category_name,TypeCategoryMap::Last);
557 EnableCategory(m_vectortypes_category_name,TypeCategoryMap::Last);
558 EnableCategory(m_system_category_name,TypeCategoryMap::Last);
Enrico Granata864e3e82012-02-17 03:18:30 +0000559}
560
Enrico Granataf68df122013-01-10 22:08:35 +0000561static void
Enrico Granata4cc21772013-10-08 20:59:02 +0000562AddFormat (TypeCategoryImpl::SharedPointer category_sp,
563 lldb::Format format,
564 ConstString type_name,
565 TypeFormatImpl::Flags flags,
566 bool regex = false)
567{
568 lldb::TypeFormatImplSP format_sp(new TypeFormatImpl(format, flags));
569
570 if (regex)
571 category_sp->GetRegexValueNavigator()->Add(RegularExpressionSP(new RegularExpression(type_name.AsCString())),format_sp);
572 else
573 category_sp->GetValueNavigator()->Add(type_name, format_sp);
574}
575
576
577static void
Enrico Granataf68df122013-01-10 22:08:35 +0000578AddStringSummary(TypeCategoryImpl::SharedPointer category_sp,
579 const char* string,
580 ConstString type_name,
Enrico Granataea2bc0f2013-02-21 19:57:10 +0000581 TypeSummaryImpl::Flags flags,
582 bool regex = false)
Enrico Granataf68df122013-01-10 22:08:35 +0000583{
584 lldb::TypeSummaryImplSP summary_sp(new StringSummaryFormat(flags,
585 string));
Enrico Granataea2bc0f2013-02-21 19:57:10 +0000586
587 if (regex)
Enrico Granata14b74fd2013-05-06 18:55:52 +0000588 category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression(type_name.AsCString())),summary_sp);
Enrico Granataea2bc0f2013-02-21 19:57:10 +0000589 else
590 category_sp->GetSummaryNavigator()->Add(type_name, summary_sp);
Enrico Granataf68df122013-01-10 22:08:35 +0000591}
592
593#ifndef LLDB_DISABLE_PYTHON
594static void
595AddScriptSummary(TypeCategoryImpl::SharedPointer category_sp,
596 const char* funct_name,
597 ConstString type_name,
Enrico Granataea2bc0f2013-02-21 19:57:10 +0000598 TypeSummaryImpl::Flags flags,
599 bool regex = false)
Enrico Granataf68df122013-01-10 22:08:35 +0000600{
601
602 std::string code(" ");
603 code.append(funct_name).append("(valobj,internal_dict)");
604
605 lldb::TypeSummaryImplSP summary_sp(new ScriptSummaryFormat(flags,
606 funct_name,
607 code.c_str()));
Enrico Granataea2bc0f2013-02-21 19:57:10 +0000608 if (regex)
Enrico Granata14b74fd2013-05-06 18:55:52 +0000609 category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression(type_name.AsCString())),summary_sp);
Enrico Granataea2bc0f2013-02-21 19:57:10 +0000610 else
611 category_sp->GetSummaryNavigator()->Add(type_name, summary_sp);
Enrico Granataf68df122013-01-10 22:08:35 +0000612}
613#endif
614
615#ifndef LLDB_DISABLE_PYTHON
616static void
617AddCXXSummary (TypeCategoryImpl::SharedPointer category_sp,
618 CXXFunctionSummaryFormat::Callback funct,
619 const char* description,
620 ConstString type_name,
Enrico Granataea2bc0f2013-02-21 19:57:10 +0000621 TypeSummaryImpl::Flags flags,
622 bool regex = false)
Enrico Granataf68df122013-01-10 22:08:35 +0000623{
624 lldb::TypeSummaryImplSP summary_sp(new CXXFunctionSummaryFormat(flags,funct,description));
Enrico Granataea2bc0f2013-02-21 19:57:10 +0000625 if (regex)
Enrico Granata14b74fd2013-05-06 18:55:52 +0000626 category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression(type_name.AsCString())),summary_sp);
Enrico Granataea2bc0f2013-02-21 19:57:10 +0000627 else
628 category_sp->GetSummaryNavigator()->Add(type_name, summary_sp);
Enrico Granataf68df122013-01-10 22:08:35 +0000629}
630#endif
631
632#ifndef LLDB_DISABLE_PYTHON
633static void AddCXXSynthetic (TypeCategoryImpl::SharedPointer category_sp,
634 CXXSyntheticChildren::CreateFrontEndCallback generator,
635 const char* description,
636 ConstString type_name,
Enrico Granataea2bc0f2013-02-21 19:57:10 +0000637 ScriptedSyntheticChildren::Flags flags,
638 bool regex = false)
Enrico Granataf68df122013-01-10 22:08:35 +0000639{
640 lldb::SyntheticChildrenSP synth_sp(new CXXSyntheticChildren(flags,description,generator));
Enrico Granataea2bc0f2013-02-21 19:57:10 +0000641 if (regex)
642 category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression(type_name.AsCString())), synth_sp);
643 else
644 category_sp->GetSyntheticNavigator()->Add(type_name,synth_sp);
Enrico Granataf68df122013-01-10 22:08:35 +0000645}
646#endif
647
Enrico Granata864e3e82012-02-17 03:18:30 +0000648void
Enrico Granatae2740882013-01-12 01:22:57 +0000649FormatManager::LoadLibStdcppFormatters()
Enrico Granata864e3e82012-02-17 03:18:30 +0000650{
Enrico Granata8d5c83f2012-03-02 00:55:53 +0000651 TypeSummaryImpl::Flags stl_summary_flags;
652 stl_summary_flags.SetCascades(true)
653 .SetSkipPointers(false)
654 .SetSkipReferences(false)
655 .SetDontShowChildren(true)
656 .SetDontShowValue(true)
657 .SetShowMembersOneLiner(false)
658 .SetHideItemNames(false);
659
660 lldb::TypeSummaryImplSP std_string_summary_sp(new StringSummaryFormat(stl_summary_flags,
Enrico Granata864e3e82012-02-17 03:18:30 +0000661 "${var._M_dataplus._M_p}"));
662
663 TypeCategoryImpl::SharedPointer gnu_category_sp = GetCategory(m_gnu_cpp_category_name);
664
665 gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::string"),
666 std_string_summary_sp);
667 gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<char>"),
668 std_string_summary_sp);
669 gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<char,std::char_traits<char>,std::allocator<char> >"),
670 std_string_summary_sp);
Greg Clayton84db9102012-03-26 23:03:23 +0000671 gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<char, std::char_traits<char>, std::allocator<char> >"),
Enrico Granata864e3e82012-02-17 03:18:30 +0000672 std_string_summary_sp);
673
Enrico Granatae2740882013-01-12 01:22:57 +0000674 // making sure we force-pick the summary for printing wstring (_M_p is a wchar_t*)
675 lldb::TypeSummaryImplSP std_wstring_summary_sp(new StringSummaryFormat(stl_summary_flags,
676 "${var._M_dataplus._M_p%S}"));
677
678 gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::wstring"),
679 std_wstring_summary_sp);
680 gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<wchar_t>"),
681 std_wstring_summary_sp);
682 gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >"),
683 std_wstring_summary_sp);
684 gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >"),
685 std_wstring_summary_sp);
686
Enrico Granata864e3e82012-02-17 03:18:30 +0000687
688#ifndef LLDB_DISABLE_PYTHON
689
690 SyntheticChildren::Flags stl_synth_flags;
691 stl_synth_flags.SetCascades(true).SetSkipPointers(false).SetSkipReferences(false);
692
Enrico Granatac5bc4122012-03-27 02:35:13 +0000693 gnu_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::vector<.+>(( )?&)?$")),
Enrico Granata5548cb52013-01-28 23:47:25 +0000694 SyntheticChildrenSP(new ScriptedSyntheticChildren(stl_synth_flags,
Enrico Granata7d222212012-04-25 17:53:41 +0000695 "lldb.formatters.cpp.gnu_libstdcpp.StdVectorSynthProvider")));
Enrico Granatac5bc4122012-03-27 02:35:13 +0000696 gnu_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::map<.+> >(( )?&)?$")),
Enrico Granata5548cb52013-01-28 23:47:25 +0000697 SyntheticChildrenSP(new ScriptedSyntheticChildren(stl_synth_flags,
Enrico Granata7d222212012-04-25 17:53:41 +0000698 "lldb.formatters.cpp.gnu_libstdcpp.StdMapSynthProvider")));
Enrico Granatac5bc4122012-03-27 02:35:13 +0000699 gnu_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::list<.+>(( )?&)?$")),
Enrico Granata5548cb52013-01-28 23:47:25 +0000700 SyntheticChildrenSP(new ScriptedSyntheticChildren(stl_synth_flags,
Enrico Granata7d222212012-04-25 17:53:41 +0000701 "lldb.formatters.cpp.gnu_libstdcpp.StdListSynthProvider")));
Enrico Granata8d5c83f2012-03-02 00:55:53 +0000702
Enrico Granata3f8e40c2013-04-24 21:52:24 +0000703 stl_summary_flags.SetDontShowChildren(false);stl_summary_flags.SetSkipPointers(true);
Enrico Granatac5bc4122012-03-27 02:35:13 +0000704 gnu_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::vector<.+>(( )?&)?$")),
705 TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags,
706 "size=${svar%#}")));
707 gnu_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::map<.+> >(( )?&)?$")),
708 TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags,
709 "size=${svar%#}")));
710 gnu_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::list<.+>(( )?&)?$")),
Enrico Granata8d5c83f2012-03-02 00:55:53 +0000711 TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags,
712 "size=${svar%#}")));
Enrico Granataea2bc0f2013-02-21 19:57:10 +0000713
714 AddCXXSynthetic(gnu_category_sp, lldb_private::formatters::LibStdcppVectorIteratorSyntheticFrontEndCreator, "std::vector iterator synthetic children", ConstString("^__gnu_cxx::__normal_iterator<.+>$"), stl_synth_flags, true);
715
716 AddCXXSynthetic(gnu_category_sp, lldb_private::formatters::LibstdcppMapIteratorSyntheticFrontEndCreator, "std::map iterator synthetic children", ConstString("^std::_Rb_tree_iterator<.+>$"), stl_synth_flags, true);
Enrico Granata3b1b2da2013-02-04 22:54:42 +0000717
718 gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::vector<std::allocator<bool> >"),
719 TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "size=${svar%#}")));
720
721 gnu_category_sp->GetSyntheticNavigator()->Add(ConstString("std::vector<std::allocator<bool> >"),
722 SyntheticChildrenSP(new CXXSyntheticChildren(stl_synth_flags,"libc++ std::vector<bool> synthetic children",lldb_private::formatters::LibstdcppVectorBoolSyntheticFrontEndCreator)));
723
Enrico Granata864e3e82012-02-17 03:18:30 +0000724#endif
725}
726
727void
Enrico Granatac7f87302012-03-12 19:47:17 +0000728FormatManager::LoadLibcxxFormatters()
729{
730 TypeSummaryImpl::Flags stl_summary_flags;
731 stl_summary_flags.SetCascades(true)
732 .SetSkipPointers(false)
733 .SetSkipReferences(false)
734 .SetDontShowChildren(true)
735 .SetDontShowValue(true)
736 .SetShowMembersOneLiner(false)
737 .SetHideItemNames(false);
738
Jason Molendaf0d0b852012-03-13 01:19:42 +0000739#ifndef LLDB_DISABLE_PYTHON
Enrico Granata3309d882013-01-12 01:00:22 +0000740 //std::string code(" lldb.formatters.cpp.libcxx.stdstring_SummaryProvider(valobj,internal_dict)");
741 //lldb::TypeSummaryImplSP std_string_summary_sp(new ScriptSummaryFormat(stl_summary_flags, "lldb.formatters.cpp.libcxx.stdstring_SummaryProvider",code.c_str()));
Enrico Granatac7f87302012-03-12 19:47:17 +0000742
Enrico Granata3309d882013-01-12 01:00:22 +0000743 lldb::TypeSummaryImplSP std_string_summary_sp(new CXXFunctionSummaryFormat(stl_summary_flags, lldb_private::formatters::LibcxxStringSummaryProvider, "std::string summary provider"));
744 lldb::TypeSummaryImplSP std_wstring_summary_sp(new CXXFunctionSummaryFormat(stl_summary_flags, lldb_private::formatters::LibcxxWStringSummaryProvider, "std::wstring summary provider"));
745
Enrico Granatac7f87302012-03-12 19:47:17 +0000746 TypeCategoryImpl::SharedPointer libcxx_category_sp = GetCategory(m_libcxx_category_name);
747
748 libcxx_category_sp->GetSummaryNavigator()->Add(ConstString("std::__1::string"),
749 std_string_summary_sp);
Greg Clayton84db9102012-03-26 23:03:23 +0000750 libcxx_category_sp->GetSummaryNavigator()->Add(ConstString("std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >"),
Enrico Granatac7f87302012-03-12 19:47:17 +0000751 std_string_summary_sp);
Jason Molendaf0d0b852012-03-13 01:19:42 +0000752
Enrico Granata3309d882013-01-12 01:00:22 +0000753 libcxx_category_sp->GetSummaryNavigator()->Add(ConstString("std::__1::wstring"),
754 std_wstring_summary_sp);
755 libcxx_category_sp->GetSummaryNavigator()->Add(ConstString("std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >"),
756 std_wstring_summary_sp);
757
Enrico Granatac7f87302012-03-12 19:47:17 +0000758 SyntheticChildren::Flags stl_synth_flags;
759 stl_synth_flags.SetCascades(true).SetSkipPointers(false).SetSkipReferences(false);
760
Enrico Granata92373532013-03-19 22:58:48 +0000761 AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdVectorSyntheticFrontEndCreator, "libc++ std::vector synthetic children", ConstString("^std::__1::vector<.+>(( )?&)?$"), stl_synth_flags, true);
762 AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdListSyntheticFrontEndCreator, "libc++ std::list synthetic children", ConstString("^std::__1::list<.+>(( )?&)?$"), stl_synth_flags, true);
763 AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdMapSyntheticFrontEndCreator, "libc++ std::map synthetic children", ConstString("^std::__1::map<.+> >(( )?&)?$"), stl_synth_flags, true);
Enrico Granata14b74fd2013-05-06 18:55:52 +0000764 AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEndCreator, "libc++ std::vector<bool> synthetic children", ConstString("std::__1::vector<std::__1::allocator<bool> >"), stl_synth_flags);
Enrico Granatab26fdad2013-06-05 17:47:23 +0000765 AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdMapSyntheticFrontEndCreator, "libc++ std::set synthetic children", ConstString("^std::__1::set<.+> >(( )?&)?$"), stl_synth_flags, true);
766 AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdMapSyntheticFrontEndCreator, "libc++ std::multiset synthetic children", ConstString("^std::__1::multiset<.+> >(( )?&)?$"), stl_synth_flags, true);
767 AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdMapSyntheticFrontEndCreator, "libc++ std::multimap synthetic children", ConstString("^std::__1::multimap<.+> >(( )?&)?$"), stl_synth_flags, true);
Enrico Granatae2e220a2013-09-12 00:48:47 +0000768 AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEndCreator, "libc++ std::unordered containers synthetic children", ConstString("^(std::__1::)unordered_(multi)?(map|set)<.+> >$"), stl_synth_flags, true);
769
Enrico Granata114bb192012-08-27 17:42:50 +0000770 libcxx_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^(std::__1::)deque<.+>(( )?&)?$")),
Enrico Granata5548cb52013-01-28 23:47:25 +0000771 SyntheticChildrenSP(new ScriptedSyntheticChildren(stl_synth_flags,
Enrico Granata114bb192012-08-27 17:42:50 +0000772 "lldb.formatters.cpp.libcxx.stddeque_SynthProvider")));
Enrico Granata92373532013-03-19 22:58:48 +0000773
774 AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEndCreator, "shared_ptr synthetic children", ConstString("^(std::__1::)shared_ptr<.+>(( )?&)?$"), stl_synth_flags, true);
775 AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEndCreator, "weak_ptr synthetic children", ConstString("^(std::__1::)weak_ptr<.+>(( )?&)?$"), stl_synth_flags, true);
Enrico Granatac7f87302012-03-12 19:47:17 +0000776
Enrico Granata14b74fd2013-05-06 18:55:52 +0000777 stl_summary_flags.SetDontShowChildren(false);stl_summary_flags.SetSkipPointers(false);
778
779 AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::vector summary provider", ConstString("^std::__1::vector<.+>(( )?&)?$"), stl_summary_flags, true);
780 AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::list summary provider", ConstString("^std::__1::list<.+>(( )?&)?$"), stl_summary_flags, true);
781 AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::map summary provider", ConstString("^std::__1::map<.+>(( )?&)?$"), stl_summary_flags, true);
782 AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::deque summary provider", ConstString("^std::__1::deque<.+>(( )?&)?$"), stl_summary_flags, true);
783 AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::vector<bool> summary provider", ConstString("std::__1::vector<std::__1::allocator<bool> >"), stl_summary_flags);
Enrico Granatab26fdad2013-06-05 17:47:23 +0000784 AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::set summary provider", ConstString("^std::__1::set<.+>(( )?&)?$"), stl_summary_flags, true);
785 AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::multiset summary provider", ConstString("^std::__1::multiset<.+>(( )?&)?$"), stl_summary_flags, true);
786 AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::multimap summary provider", ConstString("^std::__1::multimap<.+>(( )?&)?$"), stl_summary_flags, true);
Enrico Granatae2e220a2013-09-12 00:48:47 +0000787 AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::unordered containers summary provider", ConstString("^(std::__1::)unordered_(multi)?(map|set)<.+> >$"), stl_summary_flags, true);
Enrico Granata14b74fd2013-05-06 18:55:52 +0000788
789 stl_summary_flags.SetSkipPointers(true);
790 AddStringSummary(libcxx_category_sp, "{${var.__ptr_%S}} (strong=${var.count} weak=${var.weak_count})}", ConstString("^std::__1::shared_ptr<.+>(( )?&)?$"), stl_summary_flags, true);
791 AddStringSummary(libcxx_category_sp, "{${var.__ptr_%S}} (strong=${var.count} weak=${var.weak_count})}", ConstString("^std::__1::weak_ptr<.+>(( )?&)?$"), stl_summary_flags, true);
Enrico Granataea2bc0f2013-02-21 19:57:10 +0000792
793 AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibCxxVectorIteratorSyntheticFrontEndCreator, "std::vector iterator synthetic children", ConstString("^std::__1::__wrap_iter<.+>$"), stl_synth_flags, true);
794
795 AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibCxxMapIteratorSyntheticFrontEndCreator, "std::map iterator synthetic children", ConstString("^std::__1::__map_iterator<.+>$"), stl_synth_flags, true);
Enrico Granata17fd63c2013-01-16 23:17:30 +0000796
Enrico Granatac7f87302012-03-12 19:47:17 +0000797#endif
798}
799
800void
Enrico Granata864e3e82012-02-17 03:18:30 +0000801FormatManager::LoadSystemFormatters()
802{
Enrico Granataf68df122013-01-10 22:08:35 +0000803
804 TypeSummaryImpl::Flags string_flags;
Enrico Granata0337c272013-02-22 00:37:31 +0000805 string_flags.SetCascades(true)
Enrico Granataf68df122013-01-10 22:08:35 +0000806 .SetSkipPointers(true)
807 .SetSkipReferences(false)
808 .SetDontShowChildren(true)
809 .SetDontShowValue(false)
810 .SetShowMembersOneLiner(false)
811 .SetHideItemNames(false);
812
813 lldb::TypeSummaryImplSP string_format(new StringSummaryFormat(string_flags, "${var%s}"));
Enrico Granatac482a192011-08-17 22:13:59 +0000814
815
Enrico Granata061858c2012-02-15 02:34:21 +0000816 lldb::TypeSummaryImplSP string_array_format(new StringSummaryFormat(TypeSummaryImpl::Flags().SetCascades(false)
817 .SetSkipPointers(true)
818 .SetSkipReferences(false)
Enrico Granata320dcf62013-03-28 21:36:58 +0000819 .SetDontShowChildren(true)
Enrico Granata061858c2012-02-15 02:34:21 +0000820 .SetDontShowValue(true)
821 .SetShowMembersOneLiner(false)
822 .SetHideItemNames(false),
823 "${var%s}"));
Enrico Granatac482a192011-08-17 22:13:59 +0000824
825 lldb::RegularExpressionSP any_size_char_arr(new RegularExpression("char \\[[0-9]+\\]"));
826
Enrico Granata061858c2012-02-15 02:34:21 +0000827 TypeCategoryImpl::SharedPointer sys_category_sp = GetCategory(m_system_category_name);
Enrico Granatac482a192011-08-17 22:13:59 +0000828
Enrico Granata9128ee22011-09-06 19:20:51 +0000829 sys_category_sp->GetSummaryNavigator()->Add(ConstString("char *"), string_format);
Enrico Granata983920d2013-06-04 21:53:55 +0000830 sys_category_sp->GetSummaryNavigator()->Add(ConstString("unsigned char *"), string_format);
Enrico Granata9128ee22011-09-06 19:20:51 +0000831 sys_category_sp->GetRegexSummaryNavigator()->Add(any_size_char_arr, string_array_format);
Enrico Granataaff65652013-10-21 17:29:51 +0000832
Enrico Granata4ed7ef12012-07-13 18:54:40 +0000833 lldb::TypeSummaryImplSP ostype_summary(new StringSummaryFormat(TypeSummaryImpl::Flags().SetCascades(false)
834 .SetSkipPointers(true)
835 .SetSkipReferences(true)
836 .SetDontShowChildren(true)
837 .SetDontShowValue(false)
838 .SetShowMembersOneLiner(false)
839 .SetHideItemNames(false),
840 "${var%O}"));
841
842 sys_category_sp->GetSummaryNavigator()->Add(ConstString("OSType"), ostype_summary);
Enrico Granatad3d444f2012-02-23 23:10:03 +0000843
Jason Molenda1a100cd2013-01-12 04:24:50 +0000844#ifndef LLDB_DISABLE_PYTHON
Enrico Granataf68df122013-01-10 22:08:35 +0000845 // FIXME because of a bug in the FormatNavigator we need to add a summary for both X* and const X* (<rdar://problem/12717717>)
846 AddCXXSummary(sys_category_sp, lldb_private::formatters::Char16StringSummaryProvider, "char16_t * summary provider", ConstString("char16_t *"), string_flags);
Enrico Granatad3d444f2012-02-23 23:10:03 +0000847
Enrico Granataf68df122013-01-10 22:08:35 +0000848 AddCXXSummary(sys_category_sp, lldb_private::formatters::Char32StringSummaryProvider, "char32_t * summary provider", ConstString("char32_t *"), string_flags);
Enrico Granata38352042013-01-11 02:44:00 +0000849
850 AddCXXSummary(sys_category_sp, lldb_private::formatters::WCharStringSummaryProvider, "wchar_t * summary provider", ConstString("wchar_t *"), string_flags);
Enrico Granata93d59662013-01-14 23:53:26 +0000851
852 AddCXXSummary(sys_category_sp, lldb_private::formatters::Char16StringSummaryProvider, "unichar * summary provider", ConstString("unichar *"), string_flags);
Enrico Granata93d59662013-01-14 23:53:26 +0000853
854 TypeSummaryImpl::Flags widechar_flags;
855 widechar_flags.SetDontShowValue(true)
856 .SetSkipPointers(true)
857 .SetSkipReferences(false)
858 .SetCascades(true)
859 .SetDontShowChildren(true)
860 .SetHideItemNames(true)
861 .SetShowMembersOneLiner(false);
862
863 AddCXXSummary(sys_category_sp, lldb_private::formatters::Char16SummaryProvider, "char16_t summary provider", ConstString("char16_t"), widechar_flags);
864 AddCXXSummary(sys_category_sp, lldb_private::formatters::Char32SummaryProvider, "char32_t summary provider", ConstString("char32_t"), widechar_flags);
865 AddCXXSummary(sys_category_sp, lldb_private::formatters::WCharSummaryProvider, "wchar_t summary provider", ConstString("wchar_t"), widechar_flags);
866
867 AddCXXSummary(sys_category_sp, lldb_private::formatters::Char16SummaryProvider, "unichar summary provider", ConstString("unichar"), widechar_flags);
868
Enrico Granata4cc21772013-10-08 20:59:02 +0000869 TypeFormatImpl::Flags fourchar_flags;
870 fourchar_flags.SetCascades(true).SetSkipPointers(true).SetSkipReferences(true);
871
872 AddFormat(sys_category_sp, lldb::eFormatOSType, ConstString("FourCharCode"), fourchar_flags);
873
Jason Molenda1a100cd2013-01-12 04:24:50 +0000874#endif
Enrico Granatad3d444f2012-02-23 23:10:03 +0000875}
Enrico Granatab2698cd2012-09-13 18:27:09 +0000876
Enrico Granata864e3e82012-02-17 03:18:30 +0000877void
878FormatManager::LoadObjCFormatters()
879{
880 TypeSummaryImpl::Flags objc_flags;
881 objc_flags.SetCascades(false)
Enrico Granata4b7b5aa2012-07-13 18:55:41 +0000882 .SetSkipPointers(true)
883 .SetSkipReferences(true)
Enrico Granata864e3e82012-02-17 03:18:30 +0000884 .SetDontShowChildren(true)
885 .SetDontShowValue(true)
886 .SetShowMembersOneLiner(false)
887 .SetHideItemNames(false);
Enrico Granata13643112012-09-04 22:04:50 +0000888
889 TypeCategoryImpl::SharedPointer objc_category_sp = GetCategory(m_objc_category_name);
Enrico Granata864e3e82012-02-17 03:18:30 +0000890
Enrico Granatab5887262012-10-29 21:18:03 +0000891 lldb::TypeSummaryImplSP ObjC_BOOL_summary(new CXXFunctionSummaryFormat(objc_flags, lldb_private::formatters::ObjCBOOLSummaryProvider,""));
Enrico Granatabac45f62012-01-31 17:01:51 +0000892 objc_category_sp->GetSummaryNavigator()->Add(ConstString("BOOL"),
893 ObjC_BOOL_summary);
Enrico Granata4b7b5aa2012-07-13 18:55:41 +0000894 objc_category_sp->GetSummaryNavigator()->Add(ConstString("BOOL &"),
Enrico Granatab5887262012-10-29 21:18:03 +0000895 ObjC_BOOL_summary);
Enrico Granata4b7b5aa2012-07-13 18:55:41 +0000896 objc_category_sp->GetSummaryNavigator()->Add(ConstString("BOOL *"),
Enrico Granatab5887262012-10-29 21:18:03 +0000897 ObjC_BOOL_summary);
Enrico Granata4b7b5aa2012-07-13 18:55:41 +0000898
Jason Molendacc57a382012-11-01 23:35:19 +0000899#ifndef LLDB_DISABLE_PYTHON
Enrico Granata8d5c83f2012-03-02 00:55:53 +0000900 // we need to skip pointers here since we are special casing a SEL* when retrieving its value
901 objc_flags.SetSkipPointers(true);
Enrico Granataf68df122013-01-10 22:08:35 +0000902 AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<false>, "SEL summary provider", ConstString("SEL"), objc_flags);
903 AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<false>, "SEL summary provider", ConstString("struct objc_selector"), objc_flags);
904 AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<false>, "SEL summary provider", ConstString("objc_selector"), objc_flags);
905 AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<true>, "SEL summary provider", ConstString("objc_selector *"), objc_flags);
Enrico Granata75dfb432013-02-15 00:06:04 +0000906 AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<true>, "SEL summary provider", ConstString("SEL *"), objc_flags);
Enrico Granatab5887262012-10-29 21:18:03 +0000907
Enrico Granata55900862013-03-15 18:55:30 +0000908 AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCClassSummaryProvider, "Class summary provider", ConstString("Class"), objc_flags);
Enrico Granatac76b97b2013-04-26 00:59:02 +0000909
910 SyntheticChildren::Flags class_synth_flags;
911 class_synth_flags.SetCascades(true).SetSkipPointers(false).SetSkipReferences(false);
912
913 AddCXXSynthetic(objc_category_sp, lldb_private::formatters::ObjCClassSyntheticFrontEndCreator, "Class synthetic children", ConstString("Class"), class_synth_flags);
Enrico Granata13643112012-09-04 22:04:50 +0000914#endif // LLDB_DISABLE_PYTHON
Enrico Granata8d5c83f2012-03-02 00:55:53 +0000915
Enrico Granatab5887262012-10-29 21:18:03 +0000916 objc_flags.SetSkipPointers(false);
Enrico Granatae602fe12013-07-10 18:25:45 +0000917 objc_flags.SetCascades(true);
918 objc_flags.SetSkipReferences(false);
919
920 AddStringSummary (objc_category_sp,
921 "${var.__FuncPtr%A}",
922 ConstString("__block_literal_generic"),
923 objc_flags);
Enrico Granatab5887262012-10-29 21:18:03 +0000924
Enrico Granata864e3e82012-02-17 03:18:30 +0000925 TypeCategoryImpl::SharedPointer corefoundation_category_sp = GetCategory(m_corefoundation_category_name);
926
Enrico Granatae6a6d9a2012-12-10 23:30:25 +0000927 AddStringSummary(corefoundation_category_sp,
928 "${var.years} years, ${var.months} months, ${var.days} days, ${var.hours} hours, ${var.minutes} minutes ${var.seconds} seconds",
929 ConstString("CFGregorianUnits"),
930 objc_flags);
931 AddStringSummary(corefoundation_category_sp,
932 "location=${var.location} length=${var.length}",
933 ConstString("CFRange"),
934 objc_flags);
935 AddStringSummary(corefoundation_category_sp,
936 "(x=${var.x}, y=${var.y})",
937 ConstString("NSPoint"),
938 objc_flags);
939 AddStringSummary(corefoundation_category_sp,
940 "location=${var.location}, length=${var.length}",
941 ConstString("NSRange"),
942 objc_flags);
943 AddStringSummary(corefoundation_category_sp,
944 "${var.origin}, ${var.size}",
945 ConstString("NSRect"),
946 objc_flags);
947 AddStringSummary(corefoundation_category_sp,
948 "(${var.origin}, ${var.size}), ...",
949 ConstString("NSRectArray"),
950 objc_flags);
951 AddStringSummary(objc_category_sp,
952 "(width=${var.width}, height=${var.height})",
953 ConstString("NSSize"),
954 objc_flags);
Enrico Granata864e3e82012-02-17 03:18:30 +0000955
956 TypeCategoryImpl::SharedPointer coregraphics_category_sp = GetCategory(m_coregraphics_category_name);
957
Enrico Granatae6a6d9a2012-12-10 23:30:25 +0000958 AddStringSummary(coregraphics_category_sp,
959 "(width=${var.width}, height=${var.height})",
960 ConstString("CGSize"),
961 objc_flags);
962 AddStringSummary(coregraphics_category_sp,
963 "(x=${var.x}, y=${var.y})",
964 ConstString("CGPoint"),
965 objc_flags);
966 AddStringSummary(coregraphics_category_sp,
967 "origin=${var.origin} size=${var.size}",
968 ConstString("CGRect"),
969 objc_flags);
Enrico Granata864e3e82012-02-17 03:18:30 +0000970
971 TypeCategoryImpl::SharedPointer coreservices_category_sp = GetCategory(m_coreservices_category_name);
972
Enrico Granatae6a6d9a2012-12-10 23:30:25 +0000973 AddStringSummary(coreservices_category_sp,
974 "red=${var.red} green=${var.green} blue=${var.blue}",
975 ConstString("RGBColor"),
976 objc_flags);
977 AddStringSummary(coreservices_category_sp,
978 "(t=${var.top}, l=${var.left}, b=${var.bottom}, r=${var.right})",
979 ConstString("Rect"),
980 objc_flags);
981 AddStringSummary(coreservices_category_sp,
982 "(v=${var.v}, h=${var.h})",
983 ConstString("Point"),
984 objc_flags);
985 AddStringSummary(coreservices_category_sp,
986 "${var.month}/${var.day}/${var.year} ${var.hour} :${var.minute} :${var.second} dayOfWeek:${var.dayOfWeek}",
987 ConstString("DateTimeRect *"),
988 objc_flags);
989 AddStringSummary(coreservices_category_sp,
990 "${var.ld.month}/${var.ld.day}/${var.ld.year} ${var.ld.hour} :${var.ld.minute} :${var.ld.second} dayOfWeek:${var.ld.dayOfWeek}",
991 ConstString("LongDateRect"),
992 objc_flags);
993 AddStringSummary(coreservices_category_sp,
994 "(x=${var.x}, y=${var.y})",
995 ConstString("HIPoint"),
996 objc_flags);
997 AddStringSummary(coreservices_category_sp,
998 "origin=${var.origin} size=${var.size}",
999 ConstString("HIRect"),
1000 objc_flags);
Enrico Granata864e3e82012-02-17 03:18:30 +00001001
Enrico Granatad3d444f2012-02-23 23:10:03 +00001002 TypeCategoryImpl::SharedPointer appkit_category_sp = GetCategory(m_appkit_category_name);
1003
1004 TypeSummaryImpl::Flags appkit_flags;
1005 appkit_flags.SetCascades(true)
1006 .SetSkipPointers(false)
1007 .SetSkipReferences(false)
1008 .SetDontShowChildren(true)
1009 .SetDontShowValue(false)
1010 .SetShowMembersOneLiner(false)
1011 .SetHideItemNames(false);
1012
Enrico Granatab2698cd2012-09-13 18:27:09 +00001013 appkit_flags.SetDontShowChildren(false);
1014
Jason Molenda38f8bbe2012-09-15 01:59:02 +00001015
Jason Molenda5c4210be2012-09-20 06:06:59 +00001016#ifndef LLDB_DISABLE_PYTHON
Enrico Granatab2698cd2012-09-13 18:27:09 +00001017 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("NSArray"), appkit_flags);
1018 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("NSMutableArray"), appkit_flags);
1019 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("__NSArrayI"), appkit_flags);
1020 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("__NSArrayM"), appkit_flags);
1021 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("__NSCFArray"), appkit_flags);
Enrico Granata1c127dfb2013-10-05 00:03:07 +00001022 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("CFArrayRef"), appkit_flags);
1023 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("CFMutableArrayRef"), appkit_flags);
Enrico Granatab2698cd2012-09-13 18:27:09 +00001024
Enrico Granata97fca502012-09-18 17:43:16 +00001025 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("NSDictionary"), appkit_flags);
1026 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("NSMutableDictionary"), appkit_flags);
1027 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("__NSCFDictionary"), appkit_flags);
1028 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("__NSDictionaryI"), appkit_flags);
1029 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("__NSDictionaryM"), appkit_flags);
Enrico Granata1c127dfb2013-10-05 00:03:07 +00001030 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<true>, "NSDictionary summary provider", ConstString("CFDictionaryRef"), appkit_flags);
1031 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<true>, "NSDictionary summary provider", ConstString("CFMutableDictionaryRef"), appkit_flags);
Enrico Granata97fca502012-09-18 17:43:16 +00001032
Enrico Granata9f02e092013-02-18 23:16:23 +00001033 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "NSSet summary", ConstString("NSSet"), appkit_flags);
Enrico Granatacd67f972013-04-27 00:27:20 +00001034 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "NSMutableSet summary", ConstString("NSMutableSet"), appkit_flags);
Enrico Granata1c127dfb2013-10-05 00:03:07 +00001035 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSSetSummaryProvider<true>, "CFSetRef summary", ConstString("CFSetRef"), appkit_flags);
1036 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSSetSummaryProvider<true>, "CFMutableSetRef summary", ConstString("CFMutableSetRef"), appkit_flags);
1037 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "__NSCFSet summary", ConstString("__NSCFSet"), appkit_flags);
Enrico Granata9f02e092013-02-18 23:16:23 +00001038 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "__NSSetI summary", ConstString("__NSSetI"), appkit_flags);
1039 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "__NSSetM summary", ConstString("__NSSetM"), appkit_flags);
1040 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "NSCountedSet summary", ConstString("NSCountedSet"), appkit_flags);
Enrico Granatacd67f972013-04-27 00:27:20 +00001041 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "NSMutableSet summary", ConstString("NSMutableSet"), appkit_flags);
1042 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "NSOrderedSet summary", ConstString("NSOrderedSet"), appkit_flags);
1043 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "__NSOrderedSetI summary", ConstString("__NSOrderedSetI"), appkit_flags);
1044 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "__NSOrderedSetM summary", ConstString("__NSOrderedSetM"), appkit_flags);
1045
Enrico Granata97fca502012-09-18 17:43:16 +00001046 // AddSummary(appkit_category_sp, "${var.key%@} -> ${var.value%@}", ConstString("$_lldb_typegen_nspair"), appkit_flags);
1047
Enrico Granatab2698cd2012-09-13 18:27:09 +00001048 appkit_flags.SetDontShowChildren(true);
1049
Enrico Granata5548cb52013-01-28 23:47:25 +00001050 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("__NSArrayM"), ScriptedSyntheticChildren::Flags());
1051 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("__NSArrayI"), ScriptedSyntheticChildren::Flags());
1052 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("NSArray"), ScriptedSyntheticChildren::Flags());
1053 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("NSMutableArray"), ScriptedSyntheticChildren::Flags());
Enrico Granata1c127dfb2013-10-05 00:03:07 +00001054 AddCXXSynthetic(corefoundation_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("__NSCFArray"), ScriptedSyntheticChildren::Flags());
1055 AddCXXSynthetic(corefoundation_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("CFMutableArrayRef"), ScriptedSyntheticChildren::Flags());
1056 AddCXXSynthetic(corefoundation_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("CFArrayRef"), ScriptedSyntheticChildren::Flags());
Enrico Granatad3d444f2012-02-23 23:10:03 +00001057
Enrico Granata5548cb52013-01-28 23:47:25 +00001058 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("__NSDictionaryM"), ScriptedSyntheticChildren::Flags());
1059 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("__NSDictionaryI"), ScriptedSyntheticChildren::Flags());
1060 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("NSDictionary"), ScriptedSyntheticChildren::Flags());
1061 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("NSMutableDictionary"), ScriptedSyntheticChildren::Flags());
Enrico Granata1c127dfb2013-10-05 00:03:07 +00001062 AddCXXSynthetic(corefoundation_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("CFDictionaryRef"), ScriptedSyntheticChildren::Flags());
1063 AddCXXSynthetic(corefoundation_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("CFMutableDictionaryRef"), ScriptedSyntheticChildren::Flags());
Enrico Granata97fca502012-09-18 17:43:16 +00001064
Enrico Granata9f02e092013-02-18 23:16:23 +00001065 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSSetSyntheticFrontEndCreator, "NSSet synthetic children", ConstString("NSSet"), ScriptedSyntheticChildren::Flags());
Enrico Granatacd67f972013-04-27 00:27:20 +00001066 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSSetSyntheticFrontEndCreator, "__NSSetI synthetic children", ConstString("__NSSetI"), ScriptedSyntheticChildren::Flags());
1067 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSSetSyntheticFrontEndCreator, "__NSSetM synthetic children", ConstString("__NSSetM"), ScriptedSyntheticChildren::Flags());
1068 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSSetSyntheticFrontEndCreator, "NSMutableSet synthetic children", ConstString("NSMutableSet"), ScriptedSyntheticChildren::Flags());
1069 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSSetSyntheticFrontEndCreator, "NSOrderedSet synthetic children", ConstString("NSOrderedSet"), ScriptedSyntheticChildren::Flags());
1070 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSSetSyntheticFrontEndCreator, "__NSOrderedSetI synthetic children", ConstString("__NSOrderedSetI"), ScriptedSyntheticChildren::Flags());
1071 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSSetSyntheticFrontEndCreator, "__NSOrderedSetM synthetic children", ConstString("__NSOrderedSetM"), ScriptedSyntheticChildren::Flags());
1072
Enrico Granata1c127dfb2013-10-05 00:03:07 +00001073 AddCXXSummary(corefoundation_category_sp,lldb_private::formatters::CFBagSummaryProvider, "CFBag summary provider", ConstString("CFBagRef"), appkit_flags);
1074 AddCXXSummary(corefoundation_category_sp,lldb_private::formatters::CFBagSummaryProvider, "CFBag summary provider", ConstString("__CFBag"), appkit_flags);
1075 AddCXXSummary(corefoundation_category_sp,lldb_private::formatters::CFBagSummaryProvider, "CFBag summary provider", ConstString("const struct __CFBag"), appkit_flags);
1076 AddCXXSummary(corefoundation_category_sp,lldb_private::formatters::CFBagSummaryProvider, "CFBag summary provider", ConstString("CFMutableBagRef"), appkit_flags);
Enrico Granatad3d444f2012-02-23 23:10:03 +00001077
Enrico Granata1c127dfb2013-10-05 00:03:07 +00001078 AddCXXSummary(corefoundation_category_sp,lldb_private::formatters::CFBinaryHeapSummaryProvider, "CFBinaryHeap summary provider", ConstString("CFBinaryHeapRef"), appkit_flags);
1079 AddCXXSummary(corefoundation_category_sp,lldb_private::formatters::CFBinaryHeapSummaryProvider, "CFBinaryHeap summary provider", ConstString("__CFBinaryHeap"), appkit_flags);
Enrico Granata4a3274a2012-03-22 19:55:55 +00001080
Enrico Granatab2698cd2012-09-13 18:27:09 +00001081 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSString"), appkit_flags);
Enrico Granata1c127dfb2013-10-05 00:03:07 +00001082 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("CFStringRef"), appkit_flags);
1083 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("CFMutableStringRef"), appkit_flags);
Enrico Granata5bfce362013-02-08 01:55:46 +00001084 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSMutableString"), appkit_flags);
Enrico Granata1c127dfb2013-10-05 00:03:07 +00001085 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("__NSCFConstantString"), appkit_flags);
1086 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("__NSCFString"), appkit_flags);
1087 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSCFConstantString"), appkit_flags);
1088 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSCFString"), appkit_flags);
Enrico Granatab2698cd2012-09-13 18:27:09 +00001089 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSPathStore2"), appkit_flags);
Enrico Granata3467d802012-09-04 18:47:54 +00001090
Enrico Granata5bfce362013-02-08 01:55:46 +00001091 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSAttributedStringSummaryProvider, "NSAttributedString summary provider", ConstString("NSAttributedString"), appkit_flags);
1092 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSMutableAttributedStringSummaryProvider, "NSMutableAttributedString summary provider", ConstString("NSMutableAttributedString"), appkit_flags);
1093 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSMutableAttributedStringSummaryProvider, "NSMutableAttributedString summary provider", ConstString("NSConcreteMutableAttributedString"), appkit_flags);
1094
Enrico Granataf68f7322013-03-15 18:44:08 +00001095 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSBundleSummaryProvider, "NSBundle summary provider", ConstString("NSBundle"), appkit_flags);
Enrico Granata13643112012-09-04 22:04:50 +00001096
Enrico Granatab2698cd2012-09-13 18:27:09 +00001097 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("NSData"), appkit_flags);
1098 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("NSConcreteData"), appkit_flags);
1099 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("NSConcreteMutableData"), appkit_flags);
Enrico Granata1c127dfb2013-10-05 00:03:07 +00001100 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("__NSCFData"), appkit_flags);
1101 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSDataSummaryProvider<true>, "NSData summary provider", ConstString("CFDataRef"), appkit_flags);
1102 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSDataSummaryProvider<true>, "NSData summary provider", ConstString("CFMutableDataRef"), appkit_flags);
Enrico Granata4a3274a2012-03-22 19:55:55 +00001103
Enrico Granata50b5ee52013-03-16 00:50:25 +00001104 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSMachPortSummaryProvider, "NSMachPort summary provider", ConstString("NSMachPort"), appkit_flags);
1105
1106 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNotificationSummaryProvider, "NSNotification summary provider", ConstString("NSNotification"), appkit_flags);
1107 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNotificationSummaryProvider, "NSNotification summary provider", ConstString("NSConcreteNotification"), appkit_flags);
Enrico Granata4a3274a2012-03-22 19:55:55 +00001108
Enrico Granatae6a6d9a2012-12-10 23:30:25 +00001109 AddStringSummary(appkit_category_sp, "domain: ${var._domain} - code: ${var._code}", ConstString("NSError"), appkit_flags);
Enrico Granata5548cb52013-01-28 23:47:25 +00001110 AddStringSummary(appkit_category_sp,"name:${var.name%S} reason:${var.reason%S}",ConstString("NSException"),appkit_flags);
1111
Enrico Granatab2698cd2012-09-13 18:27:09 +00001112 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("NSNumber"), appkit_flags);
Enrico Granata1c127dfb2013-10-05 00:03:07 +00001113 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("__NSCFBoolean"), appkit_flags);
1114 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("__NSCFNumber"), appkit_flags);
1115 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("NSCFBoolean"), appkit_flags);
1116 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("NSCFNumber"), appkit_flags);
Enrico Granataf175ad12012-10-03 23:53:45 +00001117
1118 AddCXXSummary(appkit_category_sp, lldb_private::formatters::RuntimeSpecificDescriptionSummaryProvider, "NSDecimalNumber summary provider", ConstString("NSDecimalNumber"), appkit_flags);
1119 AddCXXSummary(appkit_category_sp, lldb_private::formatters::RuntimeSpecificDescriptionSummaryProvider, "NSHost summary provider", ConstString("NSHost"), appkit_flags);
1120 AddCXXSummary(appkit_category_sp, lldb_private::formatters::RuntimeSpecificDescriptionSummaryProvider, "NSTask summary provider", ConstString("NSTask"), appkit_flags);
1121 AddCXXSummary(appkit_category_sp, lldb_private::formatters::RuntimeSpecificDescriptionSummaryProvider, "NSValue summary provider", ConstString("NSValue"), appkit_flags);
Enrico Granataf615b802013-02-15 23:38:37 +00001122
Enrico Granatae214a022013-02-08 19:28:04 +00001123 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSURLSummaryProvider, "NSURL summary provider", ConstString("NSURL"), appkit_flags);
Enrico Granata1c127dfb2013-10-05 00:03:07 +00001124 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSURLSummaryProvider, "NSURL summary provider", ConstString("CFURLRef"), appkit_flags);
Enrico Granatad3d444f2012-02-23 23:10:03 +00001125
Enrico Granata6d37cc62013-03-19 00:27:22 +00001126 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDateSummaryProvider, "NSDate summary provider", ConstString("NSDate"), appkit_flags);
1127 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDateSummaryProvider, "NSDate summary provider", ConstString("__NSDate"), appkit_flags);
1128 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDateSummaryProvider, "NSDate summary provider", ConstString("__NSTaggedDate"), appkit_flags);
1129 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDateSummaryProvider, "NSDate summary provider", ConstString("NSCalendarDate"), appkit_flags);
Enrico Granata8d5c83f2012-03-02 00:55:53 +00001130
Enrico Granata9f71ad42013-03-16 01:50:07 +00001131 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSTimeZoneSummaryProvider, "NSTimeZone summary provider", ConstString("NSTimeZone"), appkit_flags);
1132 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSTimeZoneSummaryProvider, "NSTimeZone summary provider", ConstString("CFTimeZoneRef"), appkit_flags);
1133 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSTimeZoneSummaryProvider, "NSTimeZone summary provider", ConstString("__NSTimeZone"), appkit_flags);
Enrico Granata8d5c83f2012-03-02 00:55:53 +00001134
Enrico Granata896cd1d2012-03-01 19:32:33 +00001135 // CFAbsoluteTime is actually a double rather than a pointer to an object
1136 // we do not care about the numeric value, since it is probably meaningless to users
1137 appkit_flags.SetDontShowValue(true);
Enrico Granata1c127dfb2013-10-05 00:03:07 +00001138 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::CFAbsoluteTimeSummaryProvider, "CFAbsoluteTime summary provider", ConstString("CFAbsoluteTime"), appkit_flags);
Enrico Granata896cd1d2012-03-01 19:32:33 +00001139 appkit_flags.SetDontShowValue(false);
1140
Enrico Granata6a925112013-03-16 01:18:00 +00001141 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSIndexSetSummaryProvider, "NSIndexSet summary provider", ConstString("NSIndexSet"), appkit_flags);
1142 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSIndexSetSummaryProvider, "NSIndexSet summary provider", ConstString("NSMutableIndexSet"), appkit_flags);
Enrico Granata896cd1d2012-03-01 19:32:33 +00001143
Enrico Granatae6a6d9a2012-12-10 23:30:25 +00001144 AddStringSummary(appkit_category_sp,
1145 "@\"${var.month%d}/${var.day%d}/${var.year%d} ${var.hour%d}:${var.minute%d}:${var.second}\"",
1146 ConstString("CFGregorianDate"),
1147 appkit_flags);
Enrico Granata8d5c83f2012-03-02 00:55:53 +00001148
Enrico Granata1c127dfb2013-10-05 00:03:07 +00001149 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::CFBitVectorSummaryProvider, "CFBitVector summary provider", ConstString("CFBitVectorRef"), appkit_flags);
1150 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::CFBitVectorSummaryProvider, "CFBitVector summary provider", ConstString("CFMutableBitVectorRef"), appkit_flags);
1151 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::CFBitVectorSummaryProvider, "CFBitVector summary provider", ConstString("__CFBitVector"), appkit_flags);
1152 AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::CFBitVectorSummaryProvider, "CFBitVector summary provider", ConstString("__CFMutableBitVector"), appkit_flags);
Enrico Granata13643112012-09-04 22:04:50 +00001153#endif // LLDB_DISABLE_PYTHON
1154
Enrico Granata864e3e82012-02-17 03:18:30 +00001155 TypeCategoryImpl::SharedPointer vectors_category_sp = GetCategory(m_vectortypes_category_name);
1156
1157 TypeSummaryImpl::Flags vector_flags;
1158 vector_flags.SetCascades(true)
1159 .SetSkipPointers(true)
1160 .SetSkipReferences(false)
1161 .SetDontShowChildren(true)
1162 .SetDontShowValue(false)
1163 .SetShowMembersOneLiner(true)
1164 .SetHideItemNames(true);
1165
Enrico Granatae6a6d9a2012-12-10 23:30:25 +00001166 AddStringSummary(vectors_category_sp,
1167 "${var.uint128}",
1168 ConstString("builtin_type_vec128"),
1169 objc_flags);
Enrico Granata864e3e82012-02-17 03:18:30 +00001170
Enrico Granatae6a6d9a2012-12-10 23:30:25 +00001171 AddStringSummary(vectors_category_sp,
1172 "",
1173 ConstString("float [4]"),
1174 vector_flags);
1175 AddStringSummary(vectors_category_sp,
1176 "",
1177 ConstString("int32_t [4]"),
1178 vector_flags);
1179 AddStringSummary(vectors_category_sp,
1180 "",
1181 ConstString("int16_t [8]"),
1182 vector_flags);
1183 AddStringSummary(vectors_category_sp,
1184 "",
1185 ConstString("vDouble"),
1186 vector_flags);
1187 AddStringSummary(vectors_category_sp,
1188 "",
1189 ConstString("vFloat"),
1190 vector_flags);
1191 AddStringSummary(vectors_category_sp,
1192 "",
1193 ConstString("vSInt8"),
1194 vector_flags);
1195 AddStringSummary(vectors_category_sp,
1196 "",
1197 ConstString("vSInt16"),
1198 vector_flags);
1199 AddStringSummary(vectors_category_sp,
1200 "",
1201 ConstString("vSInt32"),
1202 vector_flags);
1203 AddStringSummary(vectors_category_sp,
1204 "",
1205 ConstString("vUInt16"),
1206 vector_flags);
1207 AddStringSummary(vectors_category_sp,
1208 "",
1209 ConstString("vUInt8"),
1210 vector_flags);
1211 AddStringSummary(vectors_category_sp,
1212 "",
1213 ConstString("vUInt16"),
1214 vector_flags);
1215 AddStringSummary(vectors_category_sp,
1216 "",
1217 ConstString("vUInt32"),
1218 vector_flags);
1219 AddStringSummary(vectors_category_sp,
1220 "",
1221 ConstString("vBool32"),
1222 vector_flags);
Greg Claytond4e25522011-10-12 00:53:29 +00001223}