blob: 38dc0c18c601b7a00e1d86b752c610e6e6ff44e2 [file] [log] [blame]
Greg Clayton5c28dd12011-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 Malead891f9b2012-12-05 00:20:57 +000010#include "lldb/lldb-python.h"
11
Greg Clayton5c28dd12011-06-23 17:59:56 +000012#include "lldb/Core/FormatManager.h"
13
14// C Includes
15// C++ Includes
16// Other libraries and framework includes
17// Project includes
18
Enrico Granataae2ae942012-09-04 18:47:54 +000019#include "lldb/Core/CXXFormatterFunctions.h"
Enrico Granataf7a9b142011-07-15 02:26:42 +000020#include "lldb/Core/Debugger.h"
21
Greg Clayton5c28dd12011-06-23 17:59:56 +000022using namespace lldb;
23using namespace lldb_private;
24
Greg Clayton3182eff2011-06-23 21:22:24 +000025
26struct FormatInfo
27{
28 Format format;
29 const char format_char; // One or more format characters that can be used for this format.
30 const char *format_name; // Long format name that can be used to specify the current format
31};
32
33static FormatInfo
34g_format_infos[] =
35{
36 { eFormatDefault , '\0' , "default" },
37 { eFormatBoolean , 'B' , "boolean" },
38 { eFormatBinary , 'b' , "binary" },
39 { eFormatBytes , 'y' , "bytes" },
40 { eFormatBytesWithASCII , 'Y' , "bytes with ASCII" },
41 { eFormatChar , 'c' , "character" },
42 { eFormatCharPrintable , 'C' , "printable character" },
43 { eFormatComplexFloat , 'F' , "complex float" },
44 { eFormatCString , 's' , "c-string" },
Greg Clayton24a6bd92011-10-27 17:55:14 +000045 { eFormatDecimal , 'd' , "decimal" },
Greg Clayton3182eff2011-06-23 21:22:24 +000046 { eFormatEnum , 'E' , "enumeration" },
47 { eFormatHex , 'x' , "hex" },
Enrico Granata535543d2012-08-09 19:33:34 +000048 { eFormatHexUppercase , 'X' , "uppercase hex" },
Greg Clayton3182eff2011-06-23 21:22:24 +000049 { eFormatFloat , 'f' , "float" },
50 { eFormatOctal , 'o' , "octal" },
51 { eFormatOSType , 'O' , "OSType" },
52 { eFormatUnicode16 , 'U' , "unicode16" },
53 { eFormatUnicode32 , '\0' , "unicode32" },
54 { eFormatUnsigned , 'u' , "unsigned decimal" },
55 { eFormatPointer , 'p' , "pointer" },
56 { eFormatVectorOfChar , '\0' , "char[]" },
57 { eFormatVectorOfSInt8 , '\0' , "int8_t[]" },
58 { eFormatVectorOfUInt8 , '\0' , "uint8_t[]" },
59 { eFormatVectorOfSInt16 , '\0' , "int16_t[]" },
60 { eFormatVectorOfUInt16 , '\0' , "uint16_t[]" },
Enrico Granata54890a32011-07-06 15:56:06 +000061 { eFormatVectorOfSInt32 , '\0' , "int32_t[]" },
62 { eFormatVectorOfUInt32 , '\0' , "uint32_t[]" },
63 { eFormatVectorOfSInt64 , '\0' , "int64_t[]" },
64 { eFormatVectorOfUInt64 , '\0' , "uint64_t[]" },
Greg Clayton3182eff2011-06-23 21:22:24 +000065 { eFormatVectorOfFloat32, '\0' , "float32[]" },
66 { eFormatVectorOfFloat64, '\0' , "float64[]" },
67 { eFormatVectorOfUInt128, '\0' , "uint128_t[]" },
68 { eFormatComplexInteger , 'I' , "complex integer" },
Greg Clayton24a6bd92011-10-27 17:55:14 +000069 { eFormatCharArray , 'a' , "character array" },
70 { eFormatAddressInfo , 'A' , "address" },
Enrico Granata535543d2012-08-09 19:33:34 +000071 { eFormatHexFloat , '\0' , "hex float" },
Sean Callanan96abc622012-08-08 17:35:10 +000072 { eFormatInstruction , 'i' , "instruction" },
73 { eFormatVoid , 'v' , "void" }
Greg Clayton3182eff2011-06-23 21:22:24 +000074};
75
76static uint32_t
77g_num_format_infos = sizeof(g_format_infos)/sizeof(FormatInfo);
78
79static bool
80GetFormatFromFormatChar (char format_char, Format &format)
81{
82 for (uint32_t i=0; i<g_num_format_infos; ++i)
83 {
84 if (g_format_infos[i].format_char == format_char)
85 {
86 format = g_format_infos[i].format;
87 return true;
88 }
89 }
90 format = eFormatInvalid;
91 return false;
92}
93
94static bool
95GetFormatFromFormatName (const char *format_name, bool partial_match_ok, Format &format)
96{
97 uint32_t i;
98 for (i=0; i<g_num_format_infos; ++i)
99 {
100 if (strcasecmp (g_format_infos[i].format_name, format_name) == 0)
101 {
102 format = g_format_infos[i].format;
103 return true;
104 }
105 }
106
107 if (partial_match_ok)
108 {
109 for (i=0; i<g_num_format_infos; ++i)
110 {
111 if (strcasestr (g_format_infos[i].format_name, format_name) == g_format_infos[i].format_name)
112 {
113 format = g_format_infos[i].format;
114 return true;
115 }
116 }
117 }
118 format = eFormatInvalid;
119 return false;
120}
121
122bool
123FormatManager::GetFormatFromCString (const char *format_cstr,
124 bool partial_match_ok,
125 lldb::Format &format)
126{
127 bool success = false;
128 if (format_cstr && format_cstr[0])
129 {
130 if (format_cstr[1] == '\0')
131 {
132 success = GetFormatFromFormatChar (format_cstr[0], format);
133 if (success)
134 return true;
135 }
136
137 success = GetFormatFromFormatName (format_cstr, partial_match_ok, format);
138 }
139 if (!success)
140 format = eFormatInvalid;
141 return success;
142}
143
144char
145FormatManager::GetFormatAsFormatChar (lldb::Format format)
146{
147 for (uint32_t i=0; i<g_num_format_infos; ++i)
148 {
149 if (g_format_infos[i].format == format)
150 return g_format_infos[i].format_char;
151 }
152 return '\0';
153}
154
155
156
157const char *
158FormatManager::GetFormatAsCString (Format format)
159{
160 if (format >= eFormatDefault && format < kNumFormats)
161 return g_format_infos[format].format_name;
162 return NULL;
163}
Enrico Granata886bc3e2011-07-02 00:25:22 +0000164
Enrico Granata16376ed2012-02-15 02:34:21 +0000165TypeCategoryImpl::TypeCategoryImpl(IFormatChangeListener* clist,
166 ConstString name) :
Enrico Granata1c617432011-08-18 16:38:26 +0000167 m_summary_nav(new SummaryNavigator("summary",clist)),
168 m_regex_summary_nav(new RegexSummaryNavigator("regex-summary",clist)),
169 m_filter_nav(new FilterNavigator("filter",clist)),
170 m_regex_filter_nav(new RegexFilterNavigator("regex-filter",clist)),
Greg Clayton3e4238d2011-11-04 03:34:56 +0000171#ifndef LLDB_DISABLE_PYTHON
Enrico Granata1c617432011-08-18 16:38:26 +0000172 m_synth_nav(new SynthNavigator("synth",clist)),
173 m_regex_synth_nav(new RegexSynthNavigator("regex-synth",clist)),
Greg Clayton3e4238d2011-11-04 03:34:56 +0000174#endif
Enrico Granata1c617432011-08-18 16:38:26 +0000175 m_enabled(false),
176 m_change_listener(clist),
177 m_mutex(Mutex::eMutexTypeRecursive),
178 m_name(name)
179{}
180
181bool
Enrico Granata16376ed2012-02-15 02:34:21 +0000182TypeCategoryImpl::Get (ValueObject& valobj,
183 lldb::TypeSummaryImplSP& entry,
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000184 lldb::DynamicValueType use_dynamic,
185 uint32_t* reason)
186{
187 if (!IsEnabled())
188 return false;
189 if (GetSummaryNavigator()->Get(valobj, entry, use_dynamic, reason))
190 return true;
191 bool regex = GetRegexSummaryNavigator()->Get(valobj, entry, use_dynamic, reason);
192 if (regex && reason)
Greg Clayton24a6bd92011-10-27 17:55:14 +0000193 *reason |= lldb_private::eFormatterChoiceCriterionRegularExpressionSummary;
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000194 return regex;
195}
196
197bool
Enrico Granata16376ed2012-02-15 02:34:21 +0000198TypeCategoryImpl::Get(ValueObject& valobj,
Greg Clayton3e4238d2011-11-04 03:34:56 +0000199 lldb::SyntheticChildrenSP& entry_sp,
Enrico Granata1c617432011-08-18 16:38:26 +0000200 lldb::DynamicValueType use_dynamic,
201 uint32_t* reason)
202{
203 if (!IsEnabled())
204 return false;
Enrico Granata16376ed2012-02-15 02:34:21 +0000205 TypeFilterImpl::SharedPointer filter_sp;
Greg Clayton3e4238d2011-11-04 03:34:56 +0000206 uint32_t reason_filter = 0;
207 bool regex_filter = false;
Enrico Granata1c617432011-08-18 16:38:26 +0000208 // first find both Filter and Synth, and then check which is most recent
209
Greg Clayton3e4238d2011-11-04 03:34:56 +0000210 if (!GetFilterNavigator()->Get(valobj, filter_sp, use_dynamic, &reason_filter))
211 regex_filter = GetRegexFilterNavigator()->Get (valobj, filter_sp, use_dynamic, &reason_filter);
212
213#ifndef LLDB_DISABLE_PYTHON
214 bool regex_synth = false;
215 uint32_t reason_synth = 0;
216 bool pick_synth = false;
Enrico Granata16376ed2012-02-15 02:34:21 +0000217 TypeSyntheticImpl::SharedPointer synth;
Enrico Granata1c617432011-08-18 16:38:26 +0000218 if (!GetSyntheticNavigator()->Get(valobj, synth, use_dynamic, &reason_synth))
Greg Clayton3e4238d2011-11-04 03:34:56 +0000219 regex_synth = GetRegexSyntheticNavigator()->Get (valobj, synth, use_dynamic, &reason_synth);
220 if (!filter_sp.get() && !synth.get())
Enrico Granata1c617432011-08-18 16:38:26 +0000221 return false;
Greg Clayton3e4238d2011-11-04 03:34:56 +0000222 else if (!filter_sp.get() && synth.get())
Enrico Granata1c617432011-08-18 16:38:26 +0000223 pick_synth = true;
224
Greg Clayton3e4238d2011-11-04 03:34:56 +0000225 else if (filter_sp.get() && !synth.get())
Enrico Granata1c617432011-08-18 16:38:26 +0000226 pick_synth = false;
227
Greg Clayton3e4238d2011-11-04 03:34:56 +0000228 else /*if (filter_sp.get() && synth.get())*/
Enrico Granata1c617432011-08-18 16:38:26 +0000229 {
Enrico Granata16376ed2012-02-15 02:34:21 +0000230 if (filter_sp->GetRevision() > synth->GetRevision())
Enrico Granata1c617432011-08-18 16:38:26 +0000231 pick_synth = false;
232 else
233 pick_synth = true;
234 }
Enrico Granata1c617432011-08-18 16:38:26 +0000235 if (pick_synth)
236 {
237 if (regex_synth && reason)
Greg Clayton24a6bd92011-10-27 17:55:14 +0000238 *reason |= lldb_private::eFormatterChoiceCriterionRegularExpressionFilter;
Greg Clayton3e4238d2011-11-04 03:34:56 +0000239 entry_sp = synth;
Enrico Granata1c617432011-08-18 16:38:26 +0000240 return true;
241 }
242 else
243 {
244 if (regex_filter && reason)
Greg Clayton24a6bd92011-10-27 17:55:14 +0000245 *reason |= lldb_private::eFormatterChoiceCriterionRegularExpressionFilter;
Greg Clayton3e4238d2011-11-04 03:34:56 +0000246 entry_sp = filter_sp;
Enrico Granata1c617432011-08-18 16:38:26 +0000247 return true;
248 }
Greg Clayton3e4238d2011-11-04 03:34:56 +0000249
250#else
251 if (filter_sp)
252 {
253 entry_sp = filter_sp;
254 return true;
255 }
256#endif
257
258 return false;
259
Enrico Granata1c617432011-08-18 16:38:26 +0000260}
261
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000262void
Enrico Granata16376ed2012-02-15 02:34:21 +0000263TypeCategoryImpl::Clear (FormatCategoryItems items)
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000264{
Enrico Granatad587a582011-08-22 23:45:15 +0000265 if ( (items & eFormatCategoryItemSummary) == eFormatCategoryItemSummary )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000266 m_summary_nav->Clear();
Enrico Granatad587a582011-08-22 23:45:15 +0000267 if ( (items & eFormatCategoryItemRegexSummary) == eFormatCategoryItemRegexSummary )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000268 m_regex_summary_nav->Clear();
Enrico Granatad587a582011-08-22 23:45:15 +0000269 if ( (items & eFormatCategoryItemFilter) == eFormatCategoryItemFilter )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000270 m_filter_nav->Clear();
Enrico Granatad587a582011-08-22 23:45:15 +0000271 if ( (items & eFormatCategoryItemRegexFilter) == eFormatCategoryItemRegexFilter )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000272 m_regex_filter_nav->Clear();
Greg Clayton3e4238d2011-11-04 03:34:56 +0000273#ifndef LLDB_DISABLE_PYTHON
Enrico Granatad587a582011-08-22 23:45:15 +0000274 if ( (items & eFormatCategoryItemSynth) == eFormatCategoryItemSynth )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000275 m_synth_nav->Clear();
Enrico Granatad587a582011-08-22 23:45:15 +0000276 if ( (items & eFormatCategoryItemRegexSynth) == eFormatCategoryItemRegexSynth )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000277 m_regex_synth_nav->Clear();
Greg Clayton3e4238d2011-11-04 03:34:56 +0000278#endif
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000279}
280
281bool
Enrico Granata16376ed2012-02-15 02:34:21 +0000282TypeCategoryImpl::Delete (ConstString name,
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000283 FormatCategoryItems items)
284{
285 bool success = false;
Enrico Granatad587a582011-08-22 23:45:15 +0000286 if ( (items & eFormatCategoryItemSummary) == eFormatCategoryItemSummary )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000287 success = m_summary_nav->Delete(name) || success;
Enrico Granatad587a582011-08-22 23:45:15 +0000288 if ( (items & eFormatCategoryItemRegexSummary) == eFormatCategoryItemRegexSummary )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000289 success = m_regex_summary_nav->Delete(name) || success;
Enrico Granatad587a582011-08-22 23:45:15 +0000290 if ( (items & eFormatCategoryItemFilter) == eFormatCategoryItemFilter )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000291 success = m_filter_nav->Delete(name) || success;
Enrico Granatad587a582011-08-22 23:45:15 +0000292 if ( (items & eFormatCategoryItemRegexFilter) == eFormatCategoryItemRegexFilter )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000293 success = m_regex_filter_nav->Delete(name) || success;
Greg Clayton3e4238d2011-11-04 03:34:56 +0000294#ifndef LLDB_DISABLE_PYTHON
Enrico Granatad587a582011-08-22 23:45:15 +0000295 if ( (items & eFormatCategoryItemSynth) == eFormatCategoryItemSynth )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000296 success = m_synth_nav->Delete(name) || success;
Enrico Granatad587a582011-08-22 23:45:15 +0000297 if ( (items & eFormatCategoryItemRegexSynth) == eFormatCategoryItemRegexSynth )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000298 success = m_regex_synth_nav->Delete(name) || success;
Greg Clayton3e4238d2011-11-04 03:34:56 +0000299#endif
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000300 return success;
301}
302
303uint32_t
Enrico Granata16376ed2012-02-15 02:34:21 +0000304TypeCategoryImpl::GetCount (FormatCategoryItems items)
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000305{
306 uint32_t count = 0;
Enrico Granatad587a582011-08-22 23:45:15 +0000307 if ( (items & eFormatCategoryItemSummary) == eFormatCategoryItemSummary )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000308 count += m_summary_nav->GetCount();
Enrico Granatad587a582011-08-22 23:45:15 +0000309 if ( (items & eFormatCategoryItemRegexSummary) == eFormatCategoryItemRegexSummary )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000310 count += m_regex_summary_nav->GetCount();
Enrico Granatad587a582011-08-22 23:45:15 +0000311 if ( (items & eFormatCategoryItemFilter) == eFormatCategoryItemFilter )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000312 count += m_filter_nav->GetCount();
Enrico Granatad587a582011-08-22 23:45:15 +0000313 if ( (items & eFormatCategoryItemRegexFilter) == eFormatCategoryItemRegexFilter )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000314 count += m_regex_filter_nav->GetCount();
Greg Clayton3e4238d2011-11-04 03:34:56 +0000315#ifndef LLDB_DISABLE_PYTHON
Enrico Granatad587a582011-08-22 23:45:15 +0000316 if ( (items & eFormatCategoryItemSynth) == eFormatCategoryItemSynth )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000317 count += m_synth_nav->GetCount();
Enrico Granatad587a582011-08-22 23:45:15 +0000318 if ( (items & eFormatCategoryItemRegexSynth) == eFormatCategoryItemRegexSynth )
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000319 count += m_regex_synth_nav->GetCount();
Greg Clayton3e4238d2011-11-04 03:34:56 +0000320#endif
Enrico Granata0be2e9b2011-08-22 22:03:47 +0000321 return count;
322}
323
Enrico Granata1c617432011-08-18 16:38:26 +0000324bool
Enrico Granata16376ed2012-02-15 02:34:21 +0000325TypeCategoryImpl::AnyMatches(ConstString type_name,
Enrico Granata1c617432011-08-18 16:38:26 +0000326 FormatCategoryItems items,
327 bool only_enabled,
328 const char** matching_category,
329 FormatCategoryItems* matching_type)
330{
331 if (!IsEnabled() && only_enabled)
332 return false;
333
Enrico Granata16376ed2012-02-15 02:34:21 +0000334 lldb::TypeSummaryImplSP summary;
335 TypeFilterImpl::SharedPointer filter;
Greg Clayton3e4238d2011-11-04 03:34:56 +0000336#ifndef LLDB_DISABLE_PYTHON
Enrico Granata16376ed2012-02-15 02:34:21 +0000337 TypeSyntheticImpl::SharedPointer synth;
Greg Clayton3e4238d2011-11-04 03:34:56 +0000338#endif
Enrico Granata1c617432011-08-18 16:38:26 +0000339
Enrico Granatad587a582011-08-22 23:45:15 +0000340 if ( (items & eFormatCategoryItemSummary) == eFormatCategoryItemSummary )
Enrico Granata1c617432011-08-18 16:38:26 +0000341 {
342 if (m_summary_nav->Get(type_name, summary))
343 {
344 if (matching_category)
Enrico Granata16376ed2012-02-15 02:34:21 +0000345 *matching_category = m_name.GetCString();
Enrico Granata1c617432011-08-18 16:38:26 +0000346 if (matching_type)
Enrico Granatad587a582011-08-22 23:45:15 +0000347 *matching_type = eFormatCategoryItemSummary;
Enrico Granata1c617432011-08-18 16:38:26 +0000348 return true;
349 }
350 }
Enrico Granatad587a582011-08-22 23:45:15 +0000351 if ( (items & eFormatCategoryItemRegexSummary) == eFormatCategoryItemRegexSummary )
Enrico Granata1c617432011-08-18 16:38:26 +0000352 {
353 if (m_regex_summary_nav->Get(type_name, summary))
354 {
355 if (matching_category)
Enrico Granata16376ed2012-02-15 02:34:21 +0000356 *matching_category = m_name.GetCString();
Enrico Granata1c617432011-08-18 16:38:26 +0000357 if (matching_type)
Enrico Granatad587a582011-08-22 23:45:15 +0000358 *matching_type = eFormatCategoryItemRegexSummary;
Enrico Granata1c617432011-08-18 16:38:26 +0000359 return true;
360 }
361 }
Enrico Granatad587a582011-08-22 23:45:15 +0000362 if ( (items & eFormatCategoryItemFilter) == eFormatCategoryItemFilter )
Enrico Granata1c617432011-08-18 16:38:26 +0000363 {
364 if (m_filter_nav->Get(type_name, filter))
365 {
366 if (matching_category)
Enrico Granata16376ed2012-02-15 02:34:21 +0000367 *matching_category = m_name.GetCString();
Enrico Granata1c617432011-08-18 16:38:26 +0000368 if (matching_type)
Enrico Granatad587a582011-08-22 23:45:15 +0000369 *matching_type = eFormatCategoryItemFilter;
Enrico Granata1c617432011-08-18 16:38:26 +0000370 return true;
371 }
372 }
Enrico Granatad587a582011-08-22 23:45:15 +0000373 if ( (items & eFormatCategoryItemRegexFilter) == eFormatCategoryItemRegexFilter )
Enrico Granata1c617432011-08-18 16:38:26 +0000374 {
375 if (m_regex_filter_nav->Get(type_name, filter))
376 {
377 if (matching_category)
Enrico Granata16376ed2012-02-15 02:34:21 +0000378 *matching_category = m_name.GetCString();
Enrico Granata1c617432011-08-18 16:38:26 +0000379 if (matching_type)
Enrico Granatad587a582011-08-22 23:45:15 +0000380 *matching_type = eFormatCategoryItemRegexFilter;
Enrico Granata1c617432011-08-18 16:38:26 +0000381 return true;
382 }
383 }
Greg Clayton3e4238d2011-11-04 03:34:56 +0000384#ifndef LLDB_DISABLE_PYTHON
Enrico Granatad587a582011-08-22 23:45:15 +0000385 if ( (items & eFormatCategoryItemSynth) == eFormatCategoryItemSynth )
Enrico Granata1c617432011-08-18 16:38:26 +0000386 {
387 if (m_synth_nav->Get(type_name, synth))
388 {
389 if (matching_category)
Enrico Granata16376ed2012-02-15 02:34:21 +0000390 *matching_category = m_name.GetCString();
Enrico Granata1c617432011-08-18 16:38:26 +0000391 if (matching_type)
Enrico Granatad587a582011-08-22 23:45:15 +0000392 *matching_type = eFormatCategoryItemSynth;
Enrico Granata1c617432011-08-18 16:38:26 +0000393 return true;
394 }
395 }
Enrico Granatad587a582011-08-22 23:45:15 +0000396 if ( (items & eFormatCategoryItemRegexSynth) == eFormatCategoryItemRegexSynth )
Enrico Granata1c617432011-08-18 16:38:26 +0000397 {
398 if (m_regex_synth_nav->Get(type_name, synth))
399 {
400 if (matching_category)
Enrico Granata16376ed2012-02-15 02:34:21 +0000401 *matching_category = m_name.GetCString();
Enrico Granata1c617432011-08-18 16:38:26 +0000402 if (matching_type)
Enrico Granatad587a582011-08-22 23:45:15 +0000403 *matching_type = eFormatCategoryItemRegexSynth;
Enrico Granata1c617432011-08-18 16:38:26 +0000404 return true;
405 }
406 }
Greg Clayton3e4238d2011-11-04 03:34:56 +0000407#endif
Enrico Granata1c617432011-08-18 16:38:26 +0000408 return false;
409}
410
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000411bool
412CategoryMap::AnyMatches (ConstString type_name,
Enrico Granata16376ed2012-02-15 02:34:21 +0000413 TypeCategoryImpl::FormatCategoryItems items,
414 bool only_enabled,
415 const char** matching_category,
416 TypeCategoryImpl::FormatCategoryItems* matching_type)
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000417{
Jason Molendabf41e192012-10-04 22:47:07 +0000418 Mutex::Locker locker(m_map_mutex);
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000419
420 MapIterator pos, end = m_map.end();
421 for (pos = m_map.begin(); pos != end; pos++)
422 {
423 if (pos->second->AnyMatches(type_name,
424 items,
425 only_enabled,
426 matching_category,
427 matching_type))
428 return true;
429 }
430 return false;
431}
432
Enrico Granata16376ed2012-02-15 02:34:21 +0000433lldb::TypeSummaryImplSP
Enrico Granata716a6282011-09-06 22:59:55 +0000434CategoryMap::GetSummaryFormat (ValueObject& valobj,
435 lldb::DynamicValueType use_dynamic)
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000436{
Jason Molendabf41e192012-10-04 22:47:07 +0000437 Mutex::Locker locker(m_map_mutex);
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000438
439 uint32_t reason_why;
440 ActiveCategoriesIterator begin, end = m_active_categories.end();
441
Enrico Granata3d656c72012-10-22 18:18:36 +0000442 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
443
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000444 for (begin = m_active_categories.begin(); begin != end; begin++)
445 {
Enrico Granata3d656c72012-10-22 18:18:36 +0000446 lldb::TypeCategoryImplSP category_sp = *begin;
Enrico Granata16376ed2012-02-15 02:34:21 +0000447 lldb::TypeSummaryImplSP current_format;
Enrico Granata3d656c72012-10-22 18:18:36 +0000448 if (log)
449 log->Printf("[CategoryMap::GetSummaryFormat] Trying to use category %s\n", category_sp->GetName());
450 if (!category_sp->Get(valobj, current_format, use_dynamic, &reason_why))
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000451 continue;
Enrico Granata716a6282011-09-06 22:59:55 +0000452 return current_format;
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000453 }
Enrico Granata3d656c72012-10-22 18:18:36 +0000454 if (log)
455 log->Printf("[CategoryMap::GetSummaryFormat] nothing found - returning empty SP\n");
Enrico Granata16376ed2012-02-15 02:34:21 +0000456 return lldb::TypeSummaryImplSP();
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000457}
458
Enrico Granata07baf832012-05-08 21:49:57 +0000459lldb::TypeSummaryImplSP
460FormatManager::GetSummaryForType (lldb::TypeNameSpecifierImplSP type_sp)
461{
462 if (!type_sp)
463 return lldb::TypeSummaryImplSP();
464 lldb::TypeSummaryImplSP summary_chosen_sp;
465 uint32_t num_categories = m_categories_map.GetCount();
466 lldb::TypeCategoryImplSP category_sp;
467 uint32_t prio_category = UINT32_MAX;
468 for (uint32_t category_id = 0;
469 category_id < num_categories;
470 category_id++)
471 {
472 category_sp = GetCategoryAtIndex(category_id);
473 if (category_sp->IsEnabled() == false)
474 continue;
475 lldb::TypeSummaryImplSP summary_current_sp = category_sp->GetSummaryForType(type_sp);
476 if (summary_current_sp && (summary_chosen_sp.get() == NULL || (prio_category > category_sp->GetEnabledPosition())))
477 {
478 prio_category = category_sp->GetEnabledPosition();
479 summary_chosen_sp = summary_current_sp;
480 }
481 }
482 return summary_chosen_sp;
483}
484
485lldb::TypeFilterImplSP
486FormatManager::GetFilterForType (lldb::TypeNameSpecifierImplSP type_sp)
487{
488 if (!type_sp)
489 return lldb::TypeFilterImplSP();
490 lldb::TypeFilterImplSP filter_chosen_sp;
491 uint32_t num_categories = m_categories_map.GetCount();
492 lldb::TypeCategoryImplSP category_sp;
493 uint32_t prio_category = UINT32_MAX;
494 for (uint32_t category_id = 0;
495 category_id < num_categories;
496 category_id++)
497 {
498 category_sp = GetCategoryAtIndex(category_id);
499 if (category_sp->IsEnabled() == false)
500 continue;
501 lldb::TypeFilterImplSP filter_current_sp((TypeFilterImpl*)category_sp->GetFilterForType(type_sp).get());
502 if (filter_current_sp && (filter_chosen_sp.get() == NULL || (prio_category > category_sp->GetEnabledPosition())))
503 {
504 prio_category = category_sp->GetEnabledPosition();
505 filter_chosen_sp = filter_current_sp;
506 }
507 }
508 return filter_chosen_sp;
509}
510
Jason Molenda45c47aa2012-05-16 00:38:08 +0000511#ifndef LLDB_DISABLE_PYTHON
Enrico Granata07baf832012-05-08 21:49:57 +0000512lldb::TypeSyntheticImplSP
513FormatManager::GetSyntheticForType (lldb::TypeNameSpecifierImplSP type_sp)
514{
515 if (!type_sp)
516 return lldb::TypeSyntheticImplSP();
517 lldb::TypeSyntheticImplSP synth_chosen_sp;
518 uint32_t num_categories = m_categories_map.GetCount();
519 lldb::TypeCategoryImplSP category_sp;
520 uint32_t prio_category = UINT32_MAX;
521 for (uint32_t category_id = 0;
522 category_id < num_categories;
523 category_id++)
524 {
525 category_sp = GetCategoryAtIndex(category_id);
526 if (category_sp->IsEnabled() == false)
527 continue;
528 lldb::TypeSyntheticImplSP synth_current_sp((TypeSyntheticImpl*)category_sp->GetSyntheticForType(type_sp).get());
529 if (synth_current_sp && (synth_chosen_sp.get() == NULL || (prio_category > category_sp->GetEnabledPosition())))
530 {
531 prio_category = category_sp->GetEnabledPosition();
532 synth_chosen_sp = synth_current_sp;
533 }
534 }
535 return synth_chosen_sp;
536}
Jason Molenda45c47aa2012-05-16 00:38:08 +0000537#endif
Enrico Granata07baf832012-05-08 21:49:57 +0000538
Jason Molenda45c47aa2012-05-16 00:38:08 +0000539#ifndef LLDB_DISABLE_PYTHON
Enrico Granata07baf832012-05-08 21:49:57 +0000540lldb::SyntheticChildrenSP
541FormatManager::GetSyntheticChildrenForType (lldb::TypeNameSpecifierImplSP type_sp)
542{
543 if (!type_sp)
544 return lldb::SyntheticChildrenSP();
545 lldb::TypeFilterImplSP filter_sp = GetFilterForType(type_sp);
546 lldb::TypeSyntheticImplSP synth_sp = GetSyntheticForType(type_sp);
547 if (filter_sp->GetRevision() > synth_sp->GetRevision())
548 return lldb::SyntheticChildrenSP(filter_sp.get());
549 else
550 return lldb::SyntheticChildrenSP(synth_sp.get());
551}
Jason Molenda45c47aa2012-05-16 00:38:08 +0000552#endif
Enrico Granata07baf832012-05-08 21:49:57 +0000553
Jason Molenda45c47aa2012-05-16 00:38:08 +0000554#ifndef LLDB_DISABLE_PYTHON
Enrico Granata716a6282011-09-06 22:59:55 +0000555lldb::SyntheticChildrenSP
556CategoryMap::GetSyntheticChildren (ValueObject& valobj,
557 lldb::DynamicValueType use_dynamic)
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000558{
Jason Molendabf41e192012-10-04 22:47:07 +0000559 Mutex::Locker locker(m_map_mutex);
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000560
561 uint32_t reason_why;
562
563 ActiveCategoriesIterator begin, end = m_active_categories.end();
564
Enrico Granata3d656c72012-10-22 18:18:36 +0000565 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
566
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000567 for (begin = m_active_categories.begin(); begin != end; begin++)
568 {
Enrico Granata3d656c72012-10-22 18:18:36 +0000569 lldb::TypeCategoryImplSP category_sp = *begin;
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000570 lldb::SyntheticChildrenSP current_format;
Enrico Granata3d656c72012-10-22 18:18:36 +0000571 if (log)
572 log->Printf("[CategoryMap::GetSyntheticChildren] Trying to use category %s\n", category_sp->GetName());
573 if (!category_sp->Get(valobj, current_format, use_dynamic, &reason_why))
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000574 continue;
Enrico Granata716a6282011-09-06 22:59:55 +0000575 return current_format;
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000576 }
Enrico Granata3d656c72012-10-22 18:18:36 +0000577 if (log)
578 log->Printf("[CategoryMap::GetSyntheticChildren] nothing found - returning empty SP\n");
Enrico Granata716a6282011-09-06 22:59:55 +0000579 return lldb::SyntheticChildrenSP();
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000580}
Jason Molenda45c47aa2012-05-16 00:38:08 +0000581#endif
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000582
Enrico Granata1c617432011-08-18 16:38:26 +0000583void
584CategoryMap::LoopThrough(CallbackType callback, void* param)
585{
586 if (callback)
587 {
Jason Molendabf41e192012-10-04 22:47:07 +0000588 Mutex::Locker locker(m_map_mutex);
Enrico Granata1c617432011-08-18 16:38:26 +0000589
590 // loop through enabled categories in respective order
591 {
592 ActiveCategoriesIterator begin, end = m_active_categories.end();
593 for (begin = m_active_categories.begin(); begin != end; begin++)
594 {
Enrico Granata16376ed2012-02-15 02:34:21 +0000595 lldb::TypeCategoryImplSP category = *begin;
596 ConstString type = ConstString(category->GetName());
Enrico Granatab0968f52011-08-22 18:36:52 +0000597 if (!callback(param, category))
Enrico Granata1c617432011-08-18 16:38:26 +0000598 break;
599 }
600 }
601
602 // loop through disabled categories in just any order
603 {
604 MapIterator pos, end = m_map.end();
605 for (pos = m_map.begin(); pos != end; pos++)
606 {
607 if (pos->second->IsEnabled())
608 continue;
609 KeyType type = pos->first;
Enrico Granatab0968f52011-08-22 18:36:52 +0000610 if (!callback(param, pos->second))
Enrico Granata1c617432011-08-18 16:38:26 +0000611 break;
612 }
613 }
614 }
615}
616
Enrico Granata16376ed2012-02-15 02:34:21 +0000617TypeCategoryImplSP
618CategoryMap::GetAtIndex (uint32_t index)
619{
Jason Molendabf41e192012-10-04 22:47:07 +0000620 Mutex::Locker locker(m_map_mutex);
Enrico Granata16376ed2012-02-15 02:34:21 +0000621
622 if (index < m_map.size())
623 {
624 MapIterator pos, end = m_map.end();
625 for (pos = m_map.begin(); pos != end; pos++)
626 {
627 if (index == 0)
628 return pos->second;
629 index--;
630 }
631 }
632
633 return TypeCategoryImplSP();
634}
635
636lldb::TypeCategoryImplSP
Enrico Granata91544802011-09-06 19:20:51 +0000637FormatManager::GetCategory (const ConstString& category_name,
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000638 bool can_create)
639{
640 if (!category_name)
Enrico Granata91544802011-09-06 19:20:51 +0000641 return GetCategory(m_default_category_name);
Enrico Granata16376ed2012-02-15 02:34:21 +0000642 lldb::TypeCategoryImplSP category;
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000643 if (m_categories_map.Get(category_name, category))
644 return category;
645
646 if (!can_create)
Enrico Granata16376ed2012-02-15 02:34:21 +0000647 return lldb::TypeCategoryImplSP();
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000648
Enrico Granata16376ed2012-02-15 02:34:21 +0000649 m_categories_map.Add(category_name,lldb::TypeCategoryImplSP(new TypeCategoryImpl(this, category_name)));
Enrico Granata91544802011-09-06 19:20:51 +0000650 return GetCategory(category_name);
Enrico Granata2c6a3d82011-08-23 00:32:52 +0000651}
652
Enrico Granata86e7c3e2011-07-12 22:56:10 +0000653lldb::Format
654FormatManager::GetSingleItemFormat(lldb::Format vector_format)
655{
656 switch(vector_format)
657 {
658 case eFormatVectorOfChar:
659 return eFormatCharArray;
660
661 case eFormatVectorOfSInt8:
662 case eFormatVectorOfSInt16:
663 case eFormatVectorOfSInt32:
664 case eFormatVectorOfSInt64:
665 return eFormatDecimal;
666
667 case eFormatVectorOfUInt8:
668 case eFormatVectorOfUInt16:
669 case eFormatVectorOfUInt32:
670 case eFormatVectorOfUInt64:
671 case eFormatVectorOfUInt128:
672 return eFormatHex;
673
674 case eFormatVectorOfFloat32:
675 case eFormatVectorOfFloat64:
676 return eFormatFloat;
677
678 default:
679 return lldb::eFormatInvalid;
680 }
Greg Clayton153ccd72011-08-10 02:10:13 +0000681}
Enrico Granataf501c592011-08-17 22:13:59 +0000682
Enrico Granatad3a86a22011-08-19 01:14:49 +0000683ConstString
684FormatManager::GetValidTypeName (const ConstString& type)
685{
686 return ::GetValidTypeName_Impl(type);
687}
688
Enrico Granataf501c592011-08-17 22:13:59 +0000689FormatManager::FormatManager() :
690 m_value_nav("format",this),
691 m_named_summaries_map(this),
692 m_last_revision(0),
693 m_categories_map(this),
Enrico Granatab0968f52011-08-22 18:36:52 +0000694 m_default_category_name(ConstString("default")),
695 m_system_category_name(ConstString("system")),
Enrico Granatab8dc7332012-01-31 17:01:51 +0000696 m_gnu_cpp_category_name(ConstString("gnu-libstdc++")),
Enrico Granata66205ce2012-03-12 19:47:17 +0000697 m_libcxx_category_name(ConstString("libcxx")),
Enrico Granatad760907c2012-02-17 03:18:30 +0000698 m_objc_category_name(ConstString("objc")),
699 m_corefoundation_category_name(ConstString("CoreFoundation")),
700 m_coregraphics_category_name(ConstString("CoreGraphics")),
701 m_coreservices_category_name(ConstString("CoreServices")),
Enrico Granata8f84cfb2012-02-23 23:10:03 +0000702 m_vectortypes_category_name(ConstString("VectorTypes")),
703 m_appkit_category_name(ConstString("AppKit"))
Enrico Granataf501c592011-08-17 22:13:59 +0000704{
705
Enrico Granatad760907c2012-02-17 03:18:30 +0000706 LoadSystemFormatters();
707 LoadSTLFormatters();
Enrico Granata66205ce2012-03-12 19:47:17 +0000708 LoadLibcxxFormatters();
Enrico Granatad760907c2012-02-17 03:18:30 +0000709 LoadObjCFormatters();
710
711 EnableCategory(m_objc_category_name,CategoryMap::Last);
Enrico Granatace035a02012-04-26 01:40:38 +0000712 EnableCategory(m_corefoundation_category_name,CategoryMap::Last);
713 EnableCategory(m_appkit_category_name,CategoryMap::Last);
714 EnableCategory(m_coreservices_category_name,CategoryMap::Last);
715 EnableCategory(m_coregraphics_category_name,CategoryMap::Last);
Enrico Granatad760907c2012-02-17 03:18:30 +0000716 EnableCategory(m_gnu_cpp_category_name,CategoryMap::Last);
Enrico Granata66205ce2012-03-12 19:47:17 +0000717 EnableCategory(m_libcxx_category_name,CategoryMap::Last);
Enrico Granatace035a02012-04-26 01:40:38 +0000718 EnableCategory(m_vectortypes_category_name,CategoryMap::Last);
Enrico Granatad760907c2012-02-17 03:18:30 +0000719 EnableCategory(m_system_category_name,CategoryMap::Last);
720}
721
722void
723FormatManager::LoadSTLFormatters()
724{
Enrico Granata86fcb162012-03-02 00:55:53 +0000725 TypeSummaryImpl::Flags stl_summary_flags;
726 stl_summary_flags.SetCascades(true)
727 .SetSkipPointers(false)
728 .SetSkipReferences(false)
729 .SetDontShowChildren(true)
730 .SetDontShowValue(true)
731 .SetShowMembersOneLiner(false)
732 .SetHideItemNames(false);
733
734 lldb::TypeSummaryImplSP std_string_summary_sp(new StringSummaryFormat(stl_summary_flags,
Enrico Granatad760907c2012-02-17 03:18:30 +0000735 "${var._M_dataplus._M_p}"));
736
737 TypeCategoryImpl::SharedPointer gnu_category_sp = GetCategory(m_gnu_cpp_category_name);
738
739 gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::string"),
740 std_string_summary_sp);
741 gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<char>"),
742 std_string_summary_sp);
743 gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<char,std::char_traits<char>,std::allocator<char> >"),
744 std_string_summary_sp);
Greg Claytondc0a38c2012-03-26 23:03:23 +0000745 gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<char, std::char_traits<char>, std::allocator<char> >"),
Enrico Granatad760907c2012-02-17 03:18:30 +0000746 std_string_summary_sp);
747
748
749#ifndef LLDB_DISABLE_PYTHON
750
751 SyntheticChildren::Flags stl_synth_flags;
752 stl_synth_flags.SetCascades(true).SetSkipPointers(false).SetSkipReferences(false);
753
Enrico Granatadba1de82012-03-27 02:35:13 +0000754 gnu_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::vector<.+>(( )?&)?$")),
Enrico Granatad760907c2012-02-17 03:18:30 +0000755 SyntheticChildrenSP(new TypeSyntheticImpl(stl_synth_flags,
Enrico Granataa5c2ce02012-04-25 17:53:41 +0000756 "lldb.formatters.cpp.gnu_libstdcpp.StdVectorSynthProvider")));
Enrico Granatadba1de82012-03-27 02:35:13 +0000757 gnu_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::map<.+> >(( )?&)?$")),
Enrico Granatad760907c2012-02-17 03:18:30 +0000758 SyntheticChildrenSP(new TypeSyntheticImpl(stl_synth_flags,
Enrico Granataa5c2ce02012-04-25 17:53:41 +0000759 "lldb.formatters.cpp.gnu_libstdcpp.StdMapSynthProvider")));
Enrico Granatadba1de82012-03-27 02:35:13 +0000760 gnu_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::list<.+>(( )?&)?$")),
Enrico Granatad760907c2012-02-17 03:18:30 +0000761 SyntheticChildrenSP(new TypeSyntheticImpl(stl_synth_flags,
Enrico Granataa5c2ce02012-04-25 17:53:41 +0000762 "lldb.formatters.cpp.gnu_libstdcpp.StdListSynthProvider")));
Enrico Granata86fcb162012-03-02 00:55:53 +0000763
Enrico Granata23255c32012-03-02 01:14:02 +0000764 stl_summary_flags.SetDontShowChildren(false);
Enrico Granatadba1de82012-03-27 02:35:13 +0000765 gnu_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::vector<.+>(( )?&)?$")),
766 TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags,
767 "size=${svar%#}")));
768 gnu_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::map<.+> >(( )?&)?$")),
769 TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags,
770 "size=${svar%#}")));
771 gnu_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::list<.+>(( )?&)?$")),
Enrico Granata86fcb162012-03-02 00:55:53 +0000772 TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags,
773 "size=${svar%#}")));
Enrico Granatad760907c2012-02-17 03:18:30 +0000774#endif
775}
776
777void
Enrico Granata66205ce2012-03-12 19:47:17 +0000778FormatManager::LoadLibcxxFormatters()
779{
780 TypeSummaryImpl::Flags stl_summary_flags;
781 stl_summary_flags.SetCascades(true)
782 .SetSkipPointers(false)
783 .SetSkipReferences(false)
784 .SetDontShowChildren(true)
785 .SetDontShowValue(true)
786 .SetShowMembersOneLiner(false)
787 .SetHideItemNames(false);
788
Jason Molenda5ae31e22012-03-13 01:19:42 +0000789#ifndef LLDB_DISABLE_PYTHON
Enrico Granatac1ca9dc2012-08-08 02:06:30 +0000790 std::string code(" lldb.formatters.cpp.libcxx.stdstring_SummaryProvider(valobj,internal_dict)");
Enrico Granataa5c2ce02012-04-25 17:53:41 +0000791 lldb::TypeSummaryImplSP std_string_summary_sp(new ScriptSummaryFormat(stl_summary_flags, "lldb.formatters.cpp.libcxx.stdstring_SummaryProvider",code.c_str()));
Enrico Granata66205ce2012-03-12 19:47:17 +0000792
793 TypeCategoryImpl::SharedPointer libcxx_category_sp = GetCategory(m_libcxx_category_name);
794
795 libcxx_category_sp->GetSummaryNavigator()->Add(ConstString("std::__1::string"),
796 std_string_summary_sp);
Greg Claytondc0a38c2012-03-26 23:03:23 +0000797 libcxx_category_sp->GetSummaryNavigator()->Add(ConstString("std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >"),
Enrico Granata66205ce2012-03-12 19:47:17 +0000798 std_string_summary_sp);
Jason Molenda5ae31e22012-03-13 01:19:42 +0000799
Enrico Granata66205ce2012-03-12 19:47:17 +0000800 SyntheticChildren::Flags stl_synth_flags;
801 stl_synth_flags.SetCascades(true).SetSkipPointers(false).SetSkipReferences(false);
802
Enrico Granatadba1de82012-03-27 02:35:13 +0000803 libcxx_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::vector<.+>(( )?&)?$")),
Enrico Granata66205ce2012-03-12 19:47:17 +0000804 SyntheticChildrenSP(new TypeSyntheticImpl(stl_synth_flags,
Enrico Granataa5c2ce02012-04-25 17:53:41 +0000805 "lldb.formatters.cpp.libcxx.stdvector_SynthProvider")));
Enrico Granatadba1de82012-03-27 02:35:13 +0000806 libcxx_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::list<.+>(( )?&)?$")),
Enrico Granata66205ce2012-03-12 19:47:17 +0000807 SyntheticChildrenSP(new TypeSyntheticImpl(stl_synth_flags,
Enrico Granataa5c2ce02012-04-25 17:53:41 +0000808 "lldb.formatters.cpp.libcxx.stdlist_SynthProvider")));
Enrico Granatadba1de82012-03-27 02:35:13 +0000809 libcxx_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::map<.+> >(( )?&)?$")),
Enrico Granata66205ce2012-03-12 19:47:17 +0000810 SyntheticChildrenSP(new TypeSyntheticImpl(stl_synth_flags,
Enrico Granataa5c2ce02012-04-25 17:53:41 +0000811 "lldb.formatters.cpp.libcxx.stdmap_SynthProvider")));
Enrico Granata5b8bfab2012-08-27 17:42:50 +0000812 libcxx_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^(std::__1::)deque<.+>(( )?&)?$")),
813 SyntheticChildrenSP(new TypeSyntheticImpl(stl_synth_flags,
814 "lldb.formatters.cpp.libcxx.stddeque_SynthProvider")));
815 libcxx_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^(std::__1::)shared_ptr<.+>(( )?&)?$")),
816 SyntheticChildrenSP(new TypeSyntheticImpl(stl_synth_flags,
817 "lldb.formatters.cpp.libcxx.stdsharedptr_SynthProvider")));
818 libcxx_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^(std::__1::)weak_ptr<.+>(( )?&)?$")),
819 SyntheticChildrenSP(new TypeSyntheticImpl(stl_synth_flags,
820 "lldb.formatters.cpp.libcxx.stdsharedptr_SynthProvider")));
Enrico Granata66205ce2012-03-12 19:47:17 +0000821
Enrico Granata5b8bfab2012-08-27 17:42:50 +0000822 stl_summary_flags.SetDontShowChildren(false);stl_summary_flags.SetSkipPointers(true);
823 libcxx_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::vector<.+>(( )?&)?$")),
Enrico Granatacf09f882012-03-19 22:58:49 +0000824 TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "size=${svar%#}")));
Enrico Granatadba1de82012-03-27 02:35:13 +0000825 libcxx_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::list<.+>(( )?&)?$")),
Enrico Granatacf09f882012-03-19 22:58:49 +0000826 TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "size=${svar%#}")));
Enrico Granatadba1de82012-03-27 02:35:13 +0000827 libcxx_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::map<.+> >(( )?&)?$")),
Enrico Granatacf09f882012-03-19 22:58:49 +0000828 TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "size=${svar%#}")));
Enrico Granata5b8bfab2012-08-27 17:42:50 +0000829 libcxx_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::deque<.+>(( )?&)?$")),
830 TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "size=${svar%#}")));
831 libcxx_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::shared_ptr<.+>(( )?&)?$")),
832 TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "{${var.__ptr_%S}} (strong=${var.count} weak=${var.weak_count})")));
833 libcxx_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::weak_ptr<.+>(( )?&)?$")),
834 TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "{${var.__ptr_%S}} (strong=${var.count} weak=${var.weak_count})")));
835
Enrico Granata66205ce2012-03-12 19:47:17 +0000836#endif
837}
838
839void
Enrico Granatad760907c2012-02-17 03:18:30 +0000840FormatManager::LoadSystemFormatters()
841{
Enrico Granata16376ed2012-02-15 02:34:21 +0000842 lldb::TypeSummaryImplSP string_format(new StringSummaryFormat(TypeSummaryImpl::Flags().SetCascades(false)
843 .SetSkipPointers(true)
844 .SetSkipReferences(false)
845 .SetDontShowChildren(true)
846 .SetDontShowValue(false)
847 .SetShowMembersOneLiner(false)
848 .SetHideItemNames(false),
849 "${var%s}"));
Enrico Granataf501c592011-08-17 22:13:59 +0000850
851
Enrico Granata16376ed2012-02-15 02:34:21 +0000852 lldb::TypeSummaryImplSP string_array_format(new StringSummaryFormat(TypeSummaryImpl::Flags().SetCascades(false)
853 .SetSkipPointers(true)
854 .SetSkipReferences(false)
855 .SetDontShowChildren(false)
856 .SetDontShowValue(true)
857 .SetShowMembersOneLiner(false)
858 .SetHideItemNames(false),
859 "${var%s}"));
Enrico Granataf501c592011-08-17 22:13:59 +0000860
861 lldb::RegularExpressionSP any_size_char_arr(new RegularExpression("char \\[[0-9]+\\]"));
862
Enrico Granata16376ed2012-02-15 02:34:21 +0000863 TypeCategoryImpl::SharedPointer sys_category_sp = GetCategory(m_system_category_name);
Enrico Granataf501c592011-08-17 22:13:59 +0000864
Enrico Granata91544802011-09-06 19:20:51 +0000865 sys_category_sp->GetSummaryNavigator()->Add(ConstString("char *"), string_format);
866 sys_category_sp->GetSummaryNavigator()->Add(ConstString("const char *"), string_format);
867 sys_category_sp->GetRegexSummaryNavigator()->Add(any_size_char_arr, string_array_format);
Enrico Granata5cee84b2012-07-13 18:54:40 +0000868
869 lldb::TypeSummaryImplSP ostype_summary(new StringSummaryFormat(TypeSummaryImpl::Flags().SetCascades(false)
870 .SetSkipPointers(true)
871 .SetSkipReferences(true)
872 .SetDontShowChildren(true)
873 .SetDontShowValue(false)
874 .SetShowMembersOneLiner(false)
875 .SetHideItemNames(false),
876 "${var%O}"));
877
878 sys_category_sp->GetSummaryNavigator()->Add(ConstString("OSType"), ostype_summary);
Enrico Granatad760907c2012-02-17 03:18:30 +0000879}
Enrico Granata2f2c2772012-02-02 23:34:52 +0000880
Enrico Granatad760907c2012-02-17 03:18:30 +0000881static void
882AddSummary(TypeCategoryImpl::SharedPointer category_sp,
883 const char* string,
884 ConstString type_name,
885 TypeSummaryImpl::Flags flags)
886{
887 lldb::TypeSummaryImplSP summary_sp(new StringSummaryFormat(flags,
888 string));
889 category_sp->GetSummaryNavigator()->Add(type_name,
890 summary_sp);
891}
Enrico Granatab8dc7332012-01-31 17:01:51 +0000892
Jason Molendad1978c82012-03-08 04:03:25 +0000893#ifndef LLDB_DISABLE_PYTHON
Enrico Granata8f84cfb2012-02-23 23:10:03 +0000894static void
895AddScriptSummary(TypeCategoryImpl::SharedPointer category_sp,
896 const char* funct_name,
897 ConstString type_name,
898 TypeSummaryImpl::Flags flags)
899{
900
901 std::string code(" ");
Enrico Granatac1ca9dc2012-08-08 02:06:30 +0000902 code.append(funct_name).append("(valobj,internal_dict)");
Enrico Granata8f84cfb2012-02-23 23:10:03 +0000903
904 lldb::TypeSummaryImplSP summary_sp(new ScriptSummaryFormat(flags,
905 funct_name,
906 code.c_str()));
907 category_sp->GetSummaryNavigator()->Add(type_name,
908 summary_sp);
909}
Jason Molendad1978c82012-03-08 04:03:25 +0000910#endif
Enrico Granata8f84cfb2012-02-23 23:10:03 +0000911
Jason Molenda3314d6c2012-09-15 01:59:02 +0000912#ifndef LLDB_DISABLE_PYTHON
Enrico Granataae2ae942012-09-04 18:47:54 +0000913static void
914AddCXXSummary (TypeCategoryImpl::SharedPointer category_sp,
915 CXXFunctionSummaryFormat::Callback funct,
916 const char* description,
917 ConstString type_name,
918 TypeSummaryImpl::Flags flags)
919{
920 lldb::TypeSummaryImplSP summary_sp(new CXXFunctionSummaryFormat(flags,funct,description));
921 category_sp->GetSummaryNavigator()->Add(type_name,
922 summary_sp);
923}
Jason Molenda3314d6c2012-09-15 01:59:02 +0000924#endif
Enrico Granataae2ae942012-09-04 18:47:54 +0000925
Jason Molenda3314d6c2012-09-15 01:59:02 +0000926#ifndef LLDB_DISABLE_PYTHON
Enrico Granataf91e78f2012-09-13 18:27:09 +0000927static void AddCXXSynthetic (TypeCategoryImpl::SharedPointer category_sp,
928 CXXSyntheticChildren::CreateFrontEndCallback generator,
929 const char* description,
930 ConstString type_name,
931 TypeSyntheticImpl::Flags flags)
932{
933 lldb::SyntheticChildrenSP synth_sp(new CXXSyntheticChildren(flags,description,generator));
934 category_sp->GetSyntheticNavigator()->Add(type_name,synth_sp);
935}
Jason Molenda3314d6c2012-09-15 01:59:02 +0000936#endif
Enrico Granataf91e78f2012-09-13 18:27:09 +0000937
Enrico Granatad760907c2012-02-17 03:18:30 +0000938void
939FormatManager::LoadObjCFormatters()
940{
941 TypeSummaryImpl::Flags objc_flags;
942 objc_flags.SetCascades(false)
Enrico Granata4ebd5ce2012-07-13 18:55:41 +0000943 .SetSkipPointers(true)
944 .SetSkipReferences(true)
Enrico Granatad760907c2012-02-17 03:18:30 +0000945 .SetDontShowChildren(true)
946 .SetDontShowValue(true)
947 .SetShowMembersOneLiner(false)
948 .SetHideItemNames(false);
Enrico Granata12ea8fb2012-09-04 22:04:50 +0000949
950 TypeCategoryImpl::SharedPointer objc_category_sp = GetCategory(m_objc_category_name);
Enrico Granatad760907c2012-02-17 03:18:30 +0000951
Enrico Granatadb054912012-10-29 21:18:03 +0000952 lldb::TypeSummaryImplSP ObjC_BOOL_summary(new CXXFunctionSummaryFormat(objc_flags, lldb_private::formatters::ObjCBOOLSummaryProvider,""));
Enrico Granatab8dc7332012-01-31 17:01:51 +0000953 objc_category_sp->GetSummaryNavigator()->Add(ConstString("BOOL"),
954 ObjC_BOOL_summary);
Enrico Granata4ebd5ce2012-07-13 18:55:41 +0000955 objc_category_sp->GetSummaryNavigator()->Add(ConstString("BOOL &"),
Enrico Granatadb054912012-10-29 21:18:03 +0000956 ObjC_BOOL_summary);
Enrico Granata4ebd5ce2012-07-13 18:55:41 +0000957 objc_category_sp->GetSummaryNavigator()->Add(ConstString("BOOL *"),
Enrico Granatadb054912012-10-29 21:18:03 +0000958 ObjC_BOOL_summary);
Enrico Granata4ebd5ce2012-07-13 18:55:41 +0000959
Jason Molendada530892012-11-01 23:35:19 +0000960#ifndef LLDB_DISABLE_PYTHON
Enrico Granata86fcb162012-03-02 00:55:53 +0000961 // we need to skip pointers here since we are special casing a SEL* when retrieving its value
962 objc_flags.SetSkipPointers(true);
Enrico Granatadb054912012-10-29 21:18:03 +0000963 AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<false>, "SEL summary", ConstString("SEL"), objc_flags);
964 AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<false>, "SEL summary", ConstString("struct objc_selector"), objc_flags);
965 AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<false>, "SEL summary", ConstString("objc_selector"), objc_flags);
966 AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<true>, "SEL summary", ConstString("objc_selector *"), objc_flags);
967
Enrico Granataa5c2ce02012-04-25 17:53:41 +0000968 AddScriptSummary(objc_category_sp, "lldb.formatters.objc.Class.Class_Summary", ConstString("Class"), objc_flags);
Enrico Granata12ea8fb2012-09-04 22:04:50 +0000969#endif // LLDB_DISABLE_PYTHON
Enrico Granata86fcb162012-03-02 00:55:53 +0000970
Enrico Granatadb054912012-10-29 21:18:03 +0000971 objc_flags.SetSkipPointers(false);
972
Enrico Granatad760907c2012-02-17 03:18:30 +0000973 TypeCategoryImpl::SharedPointer corefoundation_category_sp = GetCategory(m_corefoundation_category_name);
974
975 AddSummary(corefoundation_category_sp,
976 "${var.years} years, ${var.months} months, ${var.days} days, ${var.hours} hours, ${var.minutes} minutes ${var.seconds} seconds",
977 ConstString("CFGregorianUnits"),
978 objc_flags);
979 AddSummary(corefoundation_category_sp,
980 "location=${var.location} length=${var.length}",
981 ConstString("CFRange"),
982 objc_flags);
983 AddSummary(corefoundation_category_sp,
Enrico Granata83410e52012-03-01 19:32:33 +0000984 "(x=${var.x}, y=${var.y})",
Enrico Granatad760907c2012-02-17 03:18:30 +0000985 ConstString("NSPoint"),
986 objc_flags);
987 AddSummary(corefoundation_category_sp,
988 "location=${var.location}, length=${var.length}",
989 ConstString("NSRange"),
990 objc_flags);
991 AddSummary(corefoundation_category_sp,
992 "${var.origin}, ${var.size}",
993 ConstString("NSRect"),
994 objc_flags);
995 AddSummary(corefoundation_category_sp,
996 "(${var.origin}, ${var.size}), ...",
997 ConstString("NSRectArray"),
998 objc_flags);
999 AddSummary(objc_category_sp,
Enrico Granata83410e52012-03-01 19:32:33 +00001000 "(width=${var.width}, height=${var.height})",
Enrico Granatad760907c2012-02-17 03:18:30 +00001001 ConstString("NSSize"),
1002 objc_flags);
1003
1004 TypeCategoryImpl::SharedPointer coregraphics_category_sp = GetCategory(m_coregraphics_category_name);
1005
1006 AddSummary(coregraphics_category_sp,
1007 "(width=${var.width}, height=${var.height})",
1008 ConstString("CGSize"),
1009 objc_flags);
1010 AddSummary(coregraphics_category_sp,
1011 "(x=${var.x}, y=${var.y})",
1012 ConstString("CGPoint"),
1013 objc_flags);
1014 AddSummary(coregraphics_category_sp,
1015 "origin=${var.origin} size=${var.size}",
1016 ConstString("CGRect"),
1017 objc_flags);
1018
1019 TypeCategoryImpl::SharedPointer coreservices_category_sp = GetCategory(m_coreservices_category_name);
1020
1021 AddSummary(coreservices_category_sp,
1022 "red=${var.red} green=${var.green} blue=${var.blue}",
1023 ConstString("RGBColor"),
1024 objc_flags);
1025 AddSummary(coreservices_category_sp,
1026 "(t=${var.top}, l=${var.left}, b=${var.bottom}, r=${var.right})",
1027 ConstString("Rect"),
1028 objc_flags);
1029 AddSummary(coreservices_category_sp,
1030 "(v=${var.v}, h=${var.h})",
1031 ConstString("Point"),
1032 objc_flags);
1033 AddSummary(coreservices_category_sp,
1034 "${var.month}/${var.day}/${var.year} ${var.hour} :${var.minute} :${var.second} dayOfWeek:${var.dayOfWeek}",
1035 ConstString("DateTimeRect *"),
1036 objc_flags);
1037 AddSummary(coreservices_category_sp,
1038 "${var.ld.month}/${var.ld.day}/${var.ld.year} ${var.ld.hour} :${var.ld.minute} :${var.ld.second} dayOfWeek:${var.ld.dayOfWeek}",
1039 ConstString("LongDateRect"),
1040 objc_flags);
1041 AddSummary(coreservices_category_sp,
1042 "(x=${var.x}, y=${var.y})",
1043 ConstString("HIPoint"),
1044 objc_flags);
1045 AddSummary(coreservices_category_sp,
1046 "origin=${var.origin} size=${var.size}",
1047 ConstString("HIRect"),
1048 objc_flags);
1049
Enrico Granata8f84cfb2012-02-23 23:10:03 +00001050 TypeCategoryImpl::SharedPointer appkit_category_sp = GetCategory(m_appkit_category_name);
1051
1052 TypeSummaryImpl::Flags appkit_flags;
1053 appkit_flags.SetCascades(true)
1054 .SetSkipPointers(false)
1055 .SetSkipReferences(false)
1056 .SetDontShowChildren(true)
1057 .SetDontShowValue(false)
1058 .SetShowMembersOneLiner(false)
1059 .SetHideItemNames(false);
1060
Enrico Granataf91e78f2012-09-13 18:27:09 +00001061 appkit_flags.SetDontShowChildren(false);
1062
Jason Molenda3314d6c2012-09-15 01:59:02 +00001063
Jason Molendaf54d1452012-09-20 06:06:59 +00001064#ifndef LLDB_DISABLE_PYTHON
Enrico Granataf91e78f2012-09-13 18:27:09 +00001065 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("NSArray"), appkit_flags);
1066 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("NSMutableArray"), appkit_flags);
1067 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("__NSArrayI"), appkit_flags);
1068 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("__NSArrayM"), appkit_flags);
1069 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("__NSCFArray"), appkit_flags);
1070 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("CFArrayRef"), appkit_flags);
1071 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("CFMutableArrayRef"), appkit_flags);
1072
Enrico Granata3a08fd12012-09-18 17:43:16 +00001073 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("NSDictionary"), appkit_flags);
1074 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("NSMutableDictionary"), appkit_flags);
1075 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("__NSCFDictionary"), appkit_flags);
1076 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("__NSDictionaryI"), appkit_flags);
1077 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("__NSDictionaryM"), appkit_flags);
1078 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<true>, "NSDictionary summary provider", ConstString("CFDictionaryRef"), appkit_flags);
1079 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<true>, "NSDictionary summary provider", ConstString("CFMutableDictionaryRef"), appkit_flags);
1080
1081 // AddSummary(appkit_category_sp, "${var.key%@} -> ${var.value%@}", ConstString("$_lldb_typegen_nspair"), appkit_flags);
1082
Enrico Granataf91e78f2012-09-13 18:27:09 +00001083 appkit_flags.SetDontShowChildren(true);
1084
1085 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("__NSArrayM"), TypeSyntheticImpl::Flags());
1086 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("__NSArrayI"), TypeSyntheticImpl::Flags());
1087 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("NSArray"), TypeSyntheticImpl::Flags());
1088 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("NSMutableArray"), TypeSyntheticImpl::Flags());
1089 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("__NSCFArray"), TypeSyntheticImpl::Flags());
Enrico Granata8f84cfb2012-02-23 23:10:03 +00001090
Enrico Granata3a08fd12012-09-18 17:43:16 +00001091 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("__NSDictionaryM"), TypeSyntheticImpl::Flags());
1092 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("__NSDictionaryI"), TypeSyntheticImpl::Flags());
1093 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("NSDictionary"), TypeSyntheticImpl::Flags());
1094 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("NSMutableDictionary"), TypeSyntheticImpl::Flags());
1095 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("CFDictionaryRef"), TypeSyntheticImpl::Flags());
1096 AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("CFMutableDictionaryRef"), TypeSyntheticImpl::Flags());
1097
Enrico Granataa5c2ce02012-04-25 17:53:41 +00001098 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBag.CFBag_SummaryProvider", ConstString("CFBagRef"), appkit_flags);
1099 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBag.CFBag_SummaryProvider", ConstString("__CFBag"), appkit_flags);
1100 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBag.CFBag_SummaryProvider", ConstString("const struct __CFBag"), appkit_flags);
1101 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBag.CFBag_SummaryProvider", ConstString("CFMutableBagRef"), appkit_flags);
Enrico Granata8f84cfb2012-02-23 23:10:03 +00001102
Enrico Granataa5c2ce02012-04-25 17:53:41 +00001103 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBinaryHeap.CFBinaryHeap_SummaryProvider", ConstString("CFBinaryHeapRef"), appkit_flags);
1104 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBinaryHeap.CFBinaryHeap_SummaryProvider", ConstString("__CFBinaryHeap"), appkit_flags);
Enrico Granataf2cb7f22012-03-22 19:55:55 +00001105
Enrico Granataf91e78f2012-09-13 18:27:09 +00001106 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSString"), appkit_flags);
1107 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("CFStringRef"), appkit_flags);
1108 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("CFMutableStringRef"), appkit_flags);
1109 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("__NSCFConstantString"), appkit_flags);
1110 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("__NSCFString"), appkit_flags);
1111 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSCFConstantString"), appkit_flags);
1112 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSCFString"), appkit_flags);
1113 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSPathStore2"), appkit_flags);
Enrico Granataae2ae942012-09-04 18:47:54 +00001114
Enrico Granataa5c2ce02012-04-25 17:53:41 +00001115 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFString.CFAttributedString_SummaryProvider", ConstString("NSAttributedString"), appkit_flags);
Enrico Granata126b3442012-06-28 23:05:43 +00001116
Enrico Granataa5c2ce02012-04-25 17:53:41 +00001117 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSBundle.NSBundle_SummaryProvider", ConstString("NSBundle"), appkit_flags);
Enrico Granata12ea8fb2012-09-04 22:04:50 +00001118
Enrico Granataf91e78f2012-09-13 18:27:09 +00001119 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("NSData"), appkit_flags);
1120 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("NSConcreteData"), appkit_flags);
1121 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("NSConcreteMutableData"), appkit_flags);
1122 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("__NSCFData"), appkit_flags);
1123 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<true>, "NSData summary provider", ConstString("CFDataRef"), appkit_flags);
1124 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<true>, "NSData summary provider", ConstString("CFMutableDataRef"), appkit_flags);
Enrico Granataf2cb7f22012-03-22 19:55:55 +00001125
Enrico Granataa5c2ce02012-04-25 17:53:41 +00001126 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSException.NSException_SummaryProvider", ConstString("NSException"), appkit_flags);
Enrico Granata8f84cfb2012-02-23 23:10:03 +00001127
Enrico Granataa5c2ce02012-04-25 17:53:41 +00001128 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSMachPort.NSMachPort_SummaryProvider", ConstString("NSMachPort"), appkit_flags);
Enrico Granata8f84cfb2012-02-23 23:10:03 +00001129
Enrico Granataa5c2ce02012-04-25 17:53:41 +00001130 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSNotification.NSNotification_SummaryProvider", ConstString("NSNotification"), appkit_flags);
1131 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSNotification.NSNotification_SummaryProvider", ConstString("NSConcreteNotification"), appkit_flags);
Enrico Granataf2cb7f22012-03-22 19:55:55 +00001132
Enrico Granataf91e78f2012-09-13 18:27:09 +00001133 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("NSNumber"), appkit_flags);
1134 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("__NSCFBoolean"), appkit_flags);
1135 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("__NSCFNumber"), appkit_flags);
1136 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("NSCFBoolean"), appkit_flags);
1137 AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("NSCFNumber"), appkit_flags);
Enrico Granata9abbfba2012-10-03 23:53:45 +00001138
1139 AddCXXSummary(appkit_category_sp, lldb_private::formatters::RuntimeSpecificDescriptionSummaryProvider, "NSDecimalNumber summary provider", ConstString("NSDecimalNumber"), appkit_flags);
1140 AddCXXSummary(appkit_category_sp, lldb_private::formatters::RuntimeSpecificDescriptionSummaryProvider, "NSHost summary provider", ConstString("NSHost"), appkit_flags);
1141 AddCXXSummary(appkit_category_sp, lldb_private::formatters::RuntimeSpecificDescriptionSummaryProvider, "NSTask summary provider", ConstString("NSTask"), appkit_flags);
1142 AddCXXSummary(appkit_category_sp, lldb_private::formatters::RuntimeSpecificDescriptionSummaryProvider, "NSValue summary provider", ConstString("NSValue"), appkit_flags);
Enrico Granata8f84cfb2012-02-23 23:10:03 +00001143
Enrico Granataa5c2ce02012-04-25 17:53:41 +00001144 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSSet.NSSet_SummaryProvider", ConstString("NSSet"), appkit_flags);
1145 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSSet.NSSet_SummaryProvider2", ConstString("CFSetRef"), appkit_flags);
1146 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSSet.NSSet_SummaryProvider2", ConstString("CFMutableSetRef"), appkit_flags);
1147 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSSet.NSSet_SummaryProvider", ConstString("__NSCFSet"), appkit_flags);
1148 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSSet.NSSet_SummaryProvider", ConstString("__NSSetI"), appkit_flags);
1149 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSSet.NSSet_SummaryProvider", ConstString("__NSSetM"), appkit_flags);
1150 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSSet.NSSet_SummaryProvider", ConstString("NSCountedSet"), appkit_flags);
Enrico Granata8f84cfb2012-02-23 23:10:03 +00001151
Enrico Granataa5c2ce02012-04-25 17:53:41 +00001152 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSURL.NSURL_SummaryProvider", ConstString("NSURL"), appkit_flags);
1153 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSURL.NSURL_SummaryProvider", ConstString("CFURLRef"), appkit_flags);
Enrico Granata8f84cfb2012-02-23 23:10:03 +00001154
Enrico Granataa5c2ce02012-04-25 17:53:41 +00001155 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSDate.NSDate_SummaryProvider", ConstString("NSDate"), appkit_flags);
1156 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSDate.NSDate_SummaryProvider", ConstString("__NSDate"), appkit_flags);
1157 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSDate.NSDate_SummaryProvider", ConstString("__NSTaggedDate"), appkit_flags);
1158 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSDate.NSDate_SummaryProvider", ConstString("NSCalendarDate"), appkit_flags);
Enrico Granata86fcb162012-03-02 00:55:53 +00001159
Enrico Granataa5c2ce02012-04-25 17:53:41 +00001160 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSDate.NSTimeZone_SummaryProvider", ConstString("NSTimeZone"), appkit_flags);
1161 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSDate.NSTimeZone_SummaryProvider", ConstString("CFTimeZoneRef"), appkit_flags);
1162 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSDate.NSTimeZone_SummaryProvider", ConstString("__NSTimeZone"), appkit_flags);
Enrico Granata86fcb162012-03-02 00:55:53 +00001163
Enrico Granata83410e52012-03-01 19:32:33 +00001164 // CFAbsoluteTime is actually a double rather than a pointer to an object
1165 // we do not care about the numeric value, since it is probably meaningless to users
1166 appkit_flags.SetDontShowValue(true);
Enrico Granataa5c2ce02012-04-25 17:53:41 +00001167 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSDate.CFAbsoluteTime_SummaryProvider", ConstString("CFAbsoluteTime"), appkit_flags);
Enrico Granata83410e52012-03-01 19:32:33 +00001168 appkit_flags.SetDontShowValue(false);
1169
Enrico Granataa5c2ce02012-04-25 17:53:41 +00001170 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSIndexSet.NSIndexSet_SummaryProvider", ConstString("NSIndexSet"), appkit_flags);
1171 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSIndexSet.NSIndexSet_SummaryProvider", ConstString("NSMutableIndexSet"), appkit_flags);
Enrico Granata83410e52012-03-01 19:32:33 +00001172
Enrico Granata86fcb162012-03-02 00:55:53 +00001173 AddSummary(appkit_category_sp, "@\"${var.month%d}/${var.day%d}/${var.year%d} ${var.hour%d}:${var.minute%d}:${var.second}\"", ConstString("CFGregorianDate"), appkit_flags);
1174
Enrico Granataa5c2ce02012-04-25 17:53:41 +00001175 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBitVector.CFBitVector_SummaryProvider", ConstString("CFBitVectorRef"), appkit_flags);
1176 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBitVector.CFBitVector_SummaryProvider", ConstString("CFMutableBitVectorRef"), appkit_flags);
1177 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBitVector.CFBitVector_SummaryProvider", ConstString("__CFBitVector"), appkit_flags);
1178 AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBitVector.CFBitVector_SummaryProvider", ConstString("__CFMutableBitVector"), appkit_flags);
Enrico Granata12ea8fb2012-09-04 22:04:50 +00001179#endif // LLDB_DISABLE_PYTHON
1180
Enrico Granatad760907c2012-02-17 03:18:30 +00001181 TypeCategoryImpl::SharedPointer vectors_category_sp = GetCategory(m_vectortypes_category_name);
1182
1183 TypeSummaryImpl::Flags vector_flags;
1184 vector_flags.SetCascades(true)
1185 .SetSkipPointers(true)
1186 .SetSkipReferences(false)
1187 .SetDontShowChildren(true)
1188 .SetDontShowValue(false)
1189 .SetShowMembersOneLiner(true)
1190 .SetHideItemNames(true);
1191
1192 AddSummary(vectors_category_sp,
1193 "${var.uint128}",
1194 ConstString("builtin_type_vec128"),
1195 objc_flags);
1196
1197 AddSummary(vectors_category_sp,
1198 "",
1199 ConstString("float [4]"),
1200 vector_flags);
1201 AddSummary(vectors_category_sp,
1202 "",
1203 ConstString("int32_t [4]"),
1204 vector_flags);
1205 AddSummary(vectors_category_sp,
1206 "",
1207 ConstString("int16_t [8]"),
1208 vector_flags);
1209 AddSummary(vectors_category_sp,
1210 "",
1211 ConstString("vDouble"),
1212 vector_flags);
1213 AddSummary(vectors_category_sp,
1214 "",
1215 ConstString("vFloat"),
1216 vector_flags);
1217 AddSummary(vectors_category_sp,
1218 "",
1219 ConstString("vSInt8"),
1220 vector_flags);
1221 AddSummary(vectors_category_sp,
1222 "",
1223 ConstString("vSInt16"),
1224 vector_flags);
1225 AddSummary(vectors_category_sp,
1226 "",
1227 ConstString("vSInt32"),
1228 vector_flags);
1229 AddSummary(vectors_category_sp,
1230 "",
1231 ConstString("vUInt16"),
1232 vector_flags);
1233 AddSummary(vectors_category_sp,
1234 "",
1235 ConstString("vUInt8"),
1236 vector_flags);
1237 AddSummary(vectors_category_sp,
1238 "",
1239 ConstString("vUInt16"),
1240 vector_flags);
1241 AddSummary(vectors_category_sp,
1242 "",
1243 ConstString("vUInt32"),
1244 vector_flags);
1245 AddSummary(vectors_category_sp,
1246 "",
1247 ConstString("vBool32"),
1248 vector_flags);
Greg Clayton141f8d92011-10-12 00:53:29 +00001249}