1254721Semaste//===-- FormatManager.cpp -------------------------------------------*- C++ -*-===//
2254721Semaste//
3254721Semaste//                     The LLVM Compiler Infrastructure
4254721Semaste//
5254721Semaste// This file is distributed under the University of Illinois Open Source
6254721Semaste// License. See LICENSE.TXT for details.
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#include "lldb/lldb-python.h"
11254721Semaste
12254721Semaste#include "lldb/DataFormatters/FormatManager.h"
13254721Semaste
14254721Semaste// C Includes
15254721Semaste// C++ Includes
16254721Semaste// Other libraries and framework includes
17254721Semaste// Project includes
18254721Semaste
19254721Semaste#include "lldb/Core/Debugger.h"
20254721Semaste#include "lldb/DataFormatters/CXXFormatterFunctions.h"
21254721Semaste#include "lldb/Interpreter/ScriptInterpreterPython.h"
22254721Semaste#include "lldb/Target/ExecutionContext.h"
23254721Semaste#include "lldb/Target/Platform.h"
24254721Semaste
25254721Semasteusing namespace lldb;
26254721Semasteusing namespace lldb_private;
27254721Semaste
28254721Semaste
29254721Semastestruct FormatInfo
30254721Semaste{
31254721Semaste    Format format;
32254721Semaste    const char format_char; // One or more format characters that can be used for this format.
33254721Semaste    const char *format_name;    // Long format name that can be used to specify the current format
34254721Semaste};
35254721Semaste
36254721Semastestatic FormatInfo
37254721Semasteg_format_infos[] =
38254721Semaste{
39254721Semaste    { eFormatDefault        , '\0'  , "default"             },
40254721Semaste    { eFormatBoolean        , 'B'   , "boolean"             },
41254721Semaste    { eFormatBinary         , 'b'   , "binary"              },
42254721Semaste    { eFormatBytes          , 'y'   , "bytes"               },
43254721Semaste    { eFormatBytesWithASCII , 'Y'   , "bytes with ASCII"    },
44254721Semaste    { eFormatChar           , 'c'   , "character"           },
45254721Semaste    { eFormatCharPrintable  , 'C'   , "printable character" },
46254721Semaste    { eFormatComplexFloat   , 'F'   , "complex float"       },
47254721Semaste    { eFormatCString        , 's'   , "c-string"            },
48254721Semaste    { eFormatDecimal        , 'd'   , "decimal"             },
49254721Semaste    { eFormatEnum           , 'E'   , "enumeration"         },
50254721Semaste    { eFormatHex            , 'x'   , "hex"                 },
51254721Semaste    { eFormatHexUppercase   , 'X'   , "uppercase hex"       },
52254721Semaste    { eFormatFloat          , 'f'   , "float"               },
53254721Semaste    { eFormatOctal          , 'o'   , "octal"               },
54254721Semaste    { eFormatOSType         , 'O'   , "OSType"              },
55254721Semaste    { eFormatUnicode16      , 'U'   , "unicode16"           },
56254721Semaste    { eFormatUnicode32      , '\0'  , "unicode32"           },
57254721Semaste    { eFormatUnsigned       , 'u'   , "unsigned decimal"    },
58254721Semaste    { eFormatPointer        , 'p'   , "pointer"             },
59254721Semaste    { eFormatVectorOfChar   , '\0'  , "char[]"              },
60254721Semaste    { eFormatVectorOfSInt8  , '\0'  , "int8_t[]"            },
61254721Semaste    { eFormatVectorOfUInt8  , '\0'  , "uint8_t[]"           },
62254721Semaste    { eFormatVectorOfSInt16 , '\0'  , "int16_t[]"           },
63254721Semaste    { eFormatVectorOfUInt16 , '\0'  , "uint16_t[]"          },
64254721Semaste    { eFormatVectorOfSInt32 , '\0'  , "int32_t[]"           },
65254721Semaste    { eFormatVectorOfUInt32 , '\0'  , "uint32_t[]"          },
66254721Semaste    { eFormatVectorOfSInt64 , '\0'  , "int64_t[]"           },
67254721Semaste    { eFormatVectorOfUInt64 , '\0'  , "uint64_t[]"          },
68254721Semaste    { eFormatVectorOfFloat32, '\0'  , "float32[]"           },
69254721Semaste    { eFormatVectorOfFloat64, '\0'  , "float64[]"           },
70254721Semaste    { eFormatVectorOfUInt128, '\0'  , "uint128_t[]"         },
71254721Semaste    { eFormatComplexInteger , 'I'   , "complex integer"     },
72254721Semaste    { eFormatCharArray      , 'a'   , "character array"     },
73254721Semaste    { eFormatAddressInfo    , 'A'   , "address"             },
74254721Semaste    { eFormatHexFloat       , '\0'  , "hex float"           },
75254721Semaste    { eFormatInstruction    , 'i'   , "instruction"         },
76254721Semaste    { eFormatVoid           , 'v'   , "void"                }
77254721Semaste};
78254721Semaste
79254721Semastestatic uint32_t
80254721Semasteg_num_format_infos = sizeof(g_format_infos)/sizeof(FormatInfo);
81254721Semaste
82254721Semastestatic bool
83254721SemasteGetFormatFromFormatChar (char format_char, Format &format)
84254721Semaste{
85254721Semaste    for (uint32_t i=0; i<g_num_format_infos; ++i)
86254721Semaste    {
87254721Semaste        if (g_format_infos[i].format_char == format_char)
88254721Semaste        {
89254721Semaste            format = g_format_infos[i].format;
90254721Semaste            return true;
91254721Semaste        }
92254721Semaste    }
93254721Semaste    format = eFormatInvalid;
94254721Semaste    return false;
95254721Semaste}
96254721Semaste
97254721Semastestatic bool
98254721SemasteGetFormatFromFormatName (const char *format_name, bool partial_match_ok, Format &format)
99254721Semaste{
100254721Semaste    uint32_t i;
101254721Semaste    for (i=0; i<g_num_format_infos; ++i)
102254721Semaste    {
103254721Semaste        if (strcasecmp (g_format_infos[i].format_name, format_name) == 0)
104254721Semaste        {
105254721Semaste            format = g_format_infos[i].format;
106254721Semaste            return true;
107254721Semaste        }
108254721Semaste    }
109254721Semaste
110254721Semaste    if (partial_match_ok)
111254721Semaste    {
112254721Semaste        for (i=0; i<g_num_format_infos; ++i)
113254721Semaste        {
114254721Semaste            if (strcasestr (g_format_infos[i].format_name, format_name) == g_format_infos[i].format_name)
115254721Semaste            {
116254721Semaste                format = g_format_infos[i].format;
117254721Semaste                return true;
118254721Semaste            }
119254721Semaste        }
120254721Semaste    }
121254721Semaste    format = eFormatInvalid;
122254721Semaste    return false;
123254721Semaste}
124254721Semaste
125254721Semastebool
126254721SemasteFormatManager::GetFormatFromCString (const char *format_cstr,
127254721Semaste                                     bool partial_match_ok,
128254721Semaste                                     lldb::Format &format)
129254721Semaste{
130254721Semaste    bool success = false;
131254721Semaste    if (format_cstr && format_cstr[0])
132254721Semaste    {
133254721Semaste        if (format_cstr[1] == '\0')
134254721Semaste        {
135254721Semaste            success = GetFormatFromFormatChar (format_cstr[0], format);
136254721Semaste            if (success)
137254721Semaste                return true;
138254721Semaste        }
139254721Semaste
140254721Semaste        success = GetFormatFromFormatName (format_cstr, partial_match_ok, format);
141254721Semaste    }
142254721Semaste    if (!success)
143254721Semaste        format = eFormatInvalid;
144254721Semaste    return success;
145254721Semaste}
146254721Semaste
147254721Semastechar
148254721SemasteFormatManager::GetFormatAsFormatChar (lldb::Format format)
149254721Semaste{
150254721Semaste    for (uint32_t i=0; i<g_num_format_infos; ++i)
151254721Semaste    {
152254721Semaste        if (g_format_infos[i].format == format)
153254721Semaste            return g_format_infos[i].format_char;
154254721Semaste    }
155254721Semaste    return '\0';
156254721Semaste}
157254721Semaste
158254721Semasteconst char *
159254721SemasteFormatManager::GetFormatAsCString (Format format)
160254721Semaste{
161254721Semaste    if (format >= eFormatDefault && format < kNumFormats)
162254721Semaste        return g_format_infos[format].format_name;
163254721Semaste    return NULL;
164254721Semaste}
165254721Semaste
166254721Semastelldb::TypeSummaryImplSP
167254721SemasteFormatManager::GetSummaryForType (lldb::TypeNameSpecifierImplSP type_sp)
168254721Semaste{
169254721Semaste    if (!type_sp)
170254721Semaste        return lldb::TypeSummaryImplSP();
171254721Semaste    lldb::TypeSummaryImplSP summary_chosen_sp;
172254721Semaste    uint32_t num_categories = m_categories_map.GetCount();
173254721Semaste    lldb::TypeCategoryImplSP category_sp;
174254721Semaste    uint32_t prio_category = UINT32_MAX;
175254721Semaste    for (uint32_t category_id = 0;
176254721Semaste         category_id < num_categories;
177254721Semaste         category_id++)
178254721Semaste    {
179254721Semaste        category_sp = GetCategoryAtIndex(category_id);
180254721Semaste        if (category_sp->IsEnabled() == false)
181254721Semaste            continue;
182254721Semaste        lldb::TypeSummaryImplSP summary_current_sp = category_sp->GetSummaryForType(type_sp);
183254721Semaste        if (summary_current_sp && (summary_chosen_sp.get() == NULL || (prio_category > category_sp->GetEnabledPosition())))
184254721Semaste        {
185254721Semaste            prio_category = category_sp->GetEnabledPosition();
186254721Semaste            summary_chosen_sp = summary_current_sp;
187254721Semaste        }
188254721Semaste    }
189254721Semaste    return summary_chosen_sp;
190254721Semaste}
191254721Semaste
192254721Semastelldb::TypeFilterImplSP
193254721SemasteFormatManager::GetFilterForType (lldb::TypeNameSpecifierImplSP type_sp)
194254721Semaste{
195254721Semaste    if (!type_sp)
196254721Semaste        return lldb::TypeFilterImplSP();
197254721Semaste    lldb::TypeFilterImplSP filter_chosen_sp;
198254721Semaste    uint32_t num_categories = m_categories_map.GetCount();
199254721Semaste    lldb::TypeCategoryImplSP category_sp;
200254721Semaste    uint32_t prio_category = UINT32_MAX;
201254721Semaste    for (uint32_t category_id = 0;
202254721Semaste         category_id < num_categories;
203254721Semaste         category_id++)
204254721Semaste    {
205254721Semaste        category_sp = GetCategoryAtIndex(category_id);
206254721Semaste        if (category_sp->IsEnabled() == false)
207254721Semaste            continue;
208254721Semaste        lldb::TypeFilterImplSP filter_current_sp((TypeFilterImpl*)category_sp->GetFilterForType(type_sp).get());
209254721Semaste        if (filter_current_sp && (filter_chosen_sp.get() == NULL || (prio_category > category_sp->GetEnabledPosition())))
210254721Semaste        {
211254721Semaste            prio_category = category_sp->GetEnabledPosition();
212254721Semaste            filter_chosen_sp = filter_current_sp;
213254721Semaste        }
214254721Semaste    }
215254721Semaste    return filter_chosen_sp;
216254721Semaste}
217254721Semaste
218254721Semaste#ifndef LLDB_DISABLE_PYTHON
219254721Semastelldb::ScriptedSyntheticChildrenSP
220254721SemasteFormatManager::GetSyntheticForType (lldb::TypeNameSpecifierImplSP type_sp)
221254721Semaste{
222254721Semaste    if (!type_sp)
223254721Semaste        return lldb::ScriptedSyntheticChildrenSP();
224254721Semaste    lldb::ScriptedSyntheticChildrenSP synth_chosen_sp;
225254721Semaste    uint32_t num_categories = m_categories_map.GetCount();
226254721Semaste    lldb::TypeCategoryImplSP category_sp;
227254721Semaste    uint32_t prio_category = UINT32_MAX;
228254721Semaste    for (uint32_t category_id = 0;
229254721Semaste         category_id < num_categories;
230254721Semaste         category_id++)
231254721Semaste    {
232254721Semaste        category_sp = GetCategoryAtIndex(category_id);
233254721Semaste        if (category_sp->IsEnabled() == false)
234254721Semaste            continue;
235254721Semaste        lldb::ScriptedSyntheticChildrenSP synth_current_sp((ScriptedSyntheticChildren*)category_sp->GetSyntheticForType(type_sp).get());
236254721Semaste        if (synth_current_sp && (synth_chosen_sp.get() == NULL || (prio_category > category_sp->GetEnabledPosition())))
237254721Semaste        {
238254721Semaste            prio_category = category_sp->GetEnabledPosition();
239254721Semaste            synth_chosen_sp = synth_current_sp;
240254721Semaste        }
241254721Semaste    }
242254721Semaste    return synth_chosen_sp;
243254721Semaste}
244254721Semaste#endif
245254721Semaste
246254721Semaste#ifndef LLDB_DISABLE_PYTHON
247254721Semastelldb::SyntheticChildrenSP
248254721SemasteFormatManager::GetSyntheticChildrenForType (lldb::TypeNameSpecifierImplSP type_sp)
249254721Semaste{
250254721Semaste    if (!type_sp)
251254721Semaste        return lldb::SyntheticChildrenSP();
252254721Semaste    lldb::TypeFilterImplSP filter_sp = GetFilterForType(type_sp);
253254721Semaste    lldb::ScriptedSyntheticChildrenSP synth_sp = GetSyntheticForType(type_sp);
254254721Semaste    if (filter_sp->GetRevision() > synth_sp->GetRevision())
255254721Semaste        return lldb::SyntheticChildrenSP(filter_sp.get());
256254721Semaste    else
257254721Semaste        return lldb::SyntheticChildrenSP(synth_sp.get());
258254721Semaste}
259254721Semaste#endif
260254721Semaste
261254721Semastelldb::TypeCategoryImplSP
262254721SemasteFormatManager::GetCategory (const ConstString& category_name,
263254721Semaste                         bool can_create)
264254721Semaste{
265254721Semaste    if (!category_name)
266254721Semaste        return GetCategory(m_default_category_name);
267254721Semaste    lldb::TypeCategoryImplSP category;
268254721Semaste    if (m_categories_map.Get(category_name, category))
269254721Semaste        return category;
270254721Semaste
271254721Semaste    if (!can_create)
272254721Semaste        return lldb::TypeCategoryImplSP();
273254721Semaste
274254721Semaste    m_categories_map.Add(category_name,lldb::TypeCategoryImplSP(new TypeCategoryImpl(this, category_name)));
275254721Semaste    return GetCategory(category_name);
276254721Semaste}
277254721Semaste
278254721Semastelldb::Format
279254721SemasteFormatManager::GetSingleItemFormat(lldb::Format vector_format)
280254721Semaste{
281254721Semaste    switch(vector_format)
282254721Semaste    {
283254721Semaste        case eFormatVectorOfChar:
284254721Semaste            return eFormatCharArray;
285254721Semaste
286254721Semaste        case eFormatVectorOfSInt8:
287254721Semaste        case eFormatVectorOfSInt16:
288254721Semaste        case eFormatVectorOfSInt32:
289254721Semaste        case eFormatVectorOfSInt64:
290254721Semaste            return eFormatDecimal;
291254721Semaste
292254721Semaste        case eFormatVectorOfUInt8:
293254721Semaste        case eFormatVectorOfUInt16:
294254721Semaste        case eFormatVectorOfUInt32:
295254721Semaste        case eFormatVectorOfUInt64:
296254721Semaste        case eFormatVectorOfUInt128:
297254721Semaste            return eFormatHex;
298254721Semaste
299254721Semaste        case eFormatVectorOfFloat32:
300254721Semaste        case eFormatVectorOfFloat64:
301254721Semaste            return eFormatFloat;
302254721Semaste
303254721Semaste        default:
304254721Semaste            return lldb::eFormatInvalid;
305254721Semaste    }
306254721Semaste}
307254721Semaste
308254721SemasteConstString
309254721SemasteFormatManager::GetValidTypeName (const ConstString& type)
310254721Semaste{
311254721Semaste    return ::GetValidTypeName_Impl(type);
312254721Semaste}
313254721Semaste
314254721SemasteConstString
315254721SemasteGetTypeForCache (ValueObject& valobj,
316254721Semaste                 lldb::DynamicValueType use_dynamic)
317254721Semaste{
318254721Semaste    if (use_dynamic == lldb::eNoDynamicValues)
319254721Semaste    {
320254721Semaste        if (valobj.IsDynamic())
321254721Semaste        {
322254721Semaste            if (valobj.GetStaticValue())
323254721Semaste                return valobj.GetStaticValue()->GetQualifiedTypeName();
324254721Semaste            else
325254721Semaste                return ConstString();
326254721Semaste        }
327254721Semaste        else
328254721Semaste            return valobj.GetQualifiedTypeName();
329254721Semaste    }
330254721Semaste    if (valobj.IsDynamic())
331254721Semaste        return valobj.GetQualifiedTypeName();
332254721Semaste    if (valobj.GetDynamicValue(use_dynamic))
333254721Semaste        return valobj.GetDynamicValue(use_dynamic)->GetQualifiedTypeName();
334254721Semaste    return ConstString();
335254721Semaste}
336254721Semaste
337254721Semastelldb::TypeSummaryImplSP
338254721SemasteFormatManager::GetSummaryFormat (ValueObject& valobj,
339254721Semaste                                 lldb::DynamicValueType use_dynamic)
340254721Semaste{
341254721Semaste    TypeSummaryImplSP retval;
342254721Semaste    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
343254721Semaste    ConstString valobj_type(GetTypeForCache(valobj, use_dynamic));
344254721Semaste    if (valobj_type)
345254721Semaste    {
346254721Semaste        if (log)
347254721Semaste            log->Printf("\n\n[FormatManager::GetSummaryFormat] Looking into cache for type %s", valobj_type.AsCString("<invalid>"));
348254721Semaste        if (m_format_cache.GetSummary(valobj_type,retval))
349254721Semaste        {
350254721Semaste            if (log)
351254721Semaste            {
352254721Semaste                log->Printf("[FormatManager::GetSummaryFormat] Cache search success. Returning.");
353254721Semaste                if (log->GetDebug())
354254721Semaste                    log->Printf("[FormatManager::GetSummaryFormat] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses());
355254721Semaste            }
356254721Semaste            return retval;
357254721Semaste        }
358254721Semaste        if (log)
359254721Semaste            log->Printf("[FormatManager::GetSummaryFormat] Cache search failed. Going normal route");
360254721Semaste    }
361254721Semaste    retval = m_categories_map.GetSummaryFormat(valobj, use_dynamic);
362254721Semaste    if (valobj_type)
363254721Semaste    {
364254721Semaste        if (log)
365254721Semaste            log->Printf("[FormatManager::GetSummaryFormat] Caching %p for type %s",retval.get(),valobj_type.AsCString("<invalid>"));
366254721Semaste        m_format_cache.SetSummary(valobj_type,retval);
367254721Semaste    }
368254721Semaste    if (log && log->GetDebug())
369254721Semaste        log->Printf("[FormatManager::GetSummaryFormat] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses());
370254721Semaste    return retval;
371254721Semaste}
372254721Semaste
373254721Semaste#ifndef LLDB_DISABLE_PYTHON
374254721Semastelldb::SyntheticChildrenSP
375254721SemasteFormatManager::GetSyntheticChildren (ValueObject& valobj,
376254721Semaste                                     lldb::DynamicValueType use_dynamic)
377254721Semaste{
378254721Semaste    SyntheticChildrenSP retval;
379254721Semaste    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
380254721Semaste    ConstString valobj_type(GetTypeForCache(valobj, use_dynamic));
381254721Semaste    if (valobj_type)
382254721Semaste    {
383254721Semaste        if (log)
384254721Semaste            log->Printf("\n\n[FormatManager::GetSyntheticChildren] Looking into cache for type %s", valobj_type.AsCString("<invalid>"));
385254721Semaste        if (m_format_cache.GetSynthetic(valobj_type,retval))
386254721Semaste        {
387254721Semaste            if (log)
388254721Semaste            {
389254721Semaste                log->Printf("[FormatManager::GetSyntheticChildren] Cache search success. Returning.");
390254721Semaste                if (log->GetDebug())
391254721Semaste                    log->Printf("[FormatManager::GetSyntheticChildren] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses());
392254721Semaste            }
393254721Semaste            return retval;
394254721Semaste        }
395254721Semaste        if (log)
396254721Semaste            log->Printf("[FormatManager::GetSyntheticChildren] Cache search failed. Going normal route");
397254721Semaste    }
398254721Semaste    retval = m_categories_map.GetSyntheticChildren(valobj, use_dynamic);
399254721Semaste    if (valobj_type)
400254721Semaste    {
401254721Semaste        if (log)
402254721Semaste            log->Printf("[FormatManager::GetSyntheticChildren] Caching %p for type %s",retval.get(),valobj_type.AsCString("<invalid>"));
403254721Semaste        m_format_cache.SetSynthetic(valobj_type,retval);
404254721Semaste    }
405254721Semaste    if (log && log->GetDebug())
406254721Semaste        log->Printf("[FormatManager::GetSyntheticChildren] Cache hits: %" PRIu64 " - Cache Misses: %" PRIu64, m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses());
407254721Semaste    return retval;
408254721Semaste}
409254721Semaste#endif
410254721Semaste
411254721SemasteFormatManager::FormatManager() :
412254721Semaste    m_format_cache(),
413254721Semaste    m_value_nav("format",this),
414254721Semaste    m_named_summaries_map(this),
415254721Semaste    m_last_revision(0),
416254721Semaste    m_categories_map(this),
417254721Semaste    m_default_category_name(ConstString("default")),
418254721Semaste    m_system_category_name(ConstString("system")),
419254721Semaste    m_gnu_cpp_category_name(ConstString("gnu-libstdc++")),
420254721Semaste    m_libcxx_category_name(ConstString("libcxx")),
421254721Semaste    m_objc_category_name(ConstString("objc")),
422254721Semaste    m_corefoundation_category_name(ConstString("CoreFoundation")),
423254721Semaste    m_coregraphics_category_name(ConstString("CoreGraphics")),
424254721Semaste    m_coreservices_category_name(ConstString("CoreServices")),
425254721Semaste    m_vectortypes_category_name(ConstString("VectorTypes")),
426254721Semaste    m_appkit_category_name(ConstString("AppKit"))
427254721Semaste{
428254721Semaste    LoadSystemFormatters();
429254721Semaste    LoadLibStdcppFormatters();
430254721Semaste    LoadLibcxxFormatters();
431254721Semaste    LoadObjCFormatters();
432254721Semaste
433254721Semaste    EnableCategory(m_objc_category_name,TypeCategoryMap::Last);
434254721Semaste    EnableCategory(m_corefoundation_category_name,TypeCategoryMap::Last);
435254721Semaste    EnableCategory(m_appkit_category_name,TypeCategoryMap::Last);
436254721Semaste    EnableCategory(m_coreservices_category_name,TypeCategoryMap::Last);
437254721Semaste    EnableCategory(m_coregraphics_category_name,TypeCategoryMap::Last);
438254721Semaste    EnableCategory(m_gnu_cpp_category_name,TypeCategoryMap::Last);
439254721Semaste    EnableCategory(m_libcxx_category_name,TypeCategoryMap::Last);
440254721Semaste    EnableCategory(m_vectortypes_category_name,TypeCategoryMap::Last);
441254721Semaste    EnableCategory(m_system_category_name,TypeCategoryMap::Last);
442254721Semaste}
443254721Semaste
444254721Semastestatic void
445254721SemasteAddStringSummary(TypeCategoryImpl::SharedPointer category_sp,
446254721Semaste                 const char* string,
447254721Semaste                 ConstString type_name,
448254721Semaste                 TypeSummaryImpl::Flags flags,
449254721Semaste                 bool regex = false)
450254721Semaste{
451254721Semaste    lldb::TypeSummaryImplSP summary_sp(new StringSummaryFormat(flags,
452254721Semaste                                                               string));
453254721Semaste
454254721Semaste    if (regex)
455254721Semaste        category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression(type_name.AsCString())),summary_sp);
456254721Semaste    else
457254721Semaste        category_sp->GetSummaryNavigator()->Add(type_name, summary_sp);
458254721Semaste}
459254721Semaste
460254721Semaste#ifndef LLDB_DISABLE_PYTHON
461254721Semastestatic void
462254721SemasteAddScriptSummary(TypeCategoryImpl::SharedPointer category_sp,
463254721Semaste                 const char* funct_name,
464254721Semaste                 ConstString type_name,
465254721Semaste                 TypeSummaryImpl::Flags flags,
466254721Semaste                 bool regex = false)
467254721Semaste{
468254721Semaste
469254721Semaste    std::string code("     ");
470254721Semaste    code.append(funct_name).append("(valobj,internal_dict)");
471254721Semaste
472254721Semaste    lldb::TypeSummaryImplSP summary_sp(new ScriptSummaryFormat(flags,
473254721Semaste                                                               funct_name,
474254721Semaste                                                               code.c_str()));
475254721Semaste    if (regex)
476254721Semaste        category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression(type_name.AsCString())),summary_sp);
477254721Semaste    else
478254721Semaste        category_sp->GetSummaryNavigator()->Add(type_name, summary_sp);
479254721Semaste}
480254721Semaste#endif
481254721Semaste
482254721Semaste#ifndef LLDB_DISABLE_PYTHON
483254721Semastestatic void
484254721SemasteAddCXXSummary (TypeCategoryImpl::SharedPointer category_sp,
485254721Semaste               CXXFunctionSummaryFormat::Callback funct,
486254721Semaste               const char* description,
487254721Semaste               ConstString type_name,
488254721Semaste               TypeSummaryImpl::Flags flags,
489254721Semaste               bool regex = false)
490254721Semaste{
491254721Semaste    lldb::TypeSummaryImplSP summary_sp(new CXXFunctionSummaryFormat(flags,funct,description));
492254721Semaste    if (regex)
493254721Semaste        category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression(type_name.AsCString())),summary_sp);
494254721Semaste    else
495254721Semaste        category_sp->GetSummaryNavigator()->Add(type_name, summary_sp);
496254721Semaste}
497254721Semaste#endif
498254721Semaste
499254721Semaste#ifndef LLDB_DISABLE_PYTHON
500254721Semastestatic void AddCXXSynthetic  (TypeCategoryImpl::SharedPointer category_sp,
501254721Semaste                              CXXSyntheticChildren::CreateFrontEndCallback generator,
502254721Semaste                              const char* description,
503254721Semaste                              ConstString type_name,
504254721Semaste                              ScriptedSyntheticChildren::Flags flags,
505254721Semaste                              bool regex = false)
506254721Semaste{
507254721Semaste    lldb::SyntheticChildrenSP synth_sp(new CXXSyntheticChildren(flags,description,generator));
508254721Semaste    if (regex)
509254721Semaste        category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression(type_name.AsCString())), synth_sp);
510254721Semaste    else
511254721Semaste        category_sp->GetSyntheticNavigator()->Add(type_name,synth_sp);
512254721Semaste}
513254721Semaste#endif
514254721Semaste
515254721Semastevoid
516254721SemasteFormatManager::LoadLibStdcppFormatters()
517254721Semaste{
518254721Semaste    TypeSummaryImpl::Flags stl_summary_flags;
519254721Semaste    stl_summary_flags.SetCascades(true)
520254721Semaste    .SetSkipPointers(false)
521254721Semaste    .SetSkipReferences(false)
522254721Semaste    .SetDontShowChildren(true)
523254721Semaste    .SetDontShowValue(true)
524254721Semaste    .SetShowMembersOneLiner(false)
525254721Semaste    .SetHideItemNames(false);
526254721Semaste
527254721Semaste    lldb::TypeSummaryImplSP std_string_summary_sp(new StringSummaryFormat(stl_summary_flags,
528254721Semaste                                                                          "${var._M_dataplus._M_p}"));
529254721Semaste
530254721Semaste    TypeCategoryImpl::SharedPointer gnu_category_sp = GetCategory(m_gnu_cpp_category_name);
531254721Semaste
532254721Semaste    gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::string"),
533254721Semaste                                                std_string_summary_sp);
534254721Semaste    gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<char>"),
535254721Semaste                                                std_string_summary_sp);
536254721Semaste    gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<char,std::char_traits<char>,std::allocator<char> >"),
537254721Semaste                                                std_string_summary_sp);
538254721Semaste    gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<char, std::char_traits<char>, std::allocator<char> >"),
539254721Semaste                                                std_string_summary_sp);
540254721Semaste
541254721Semaste    // making sure we force-pick the summary for printing wstring (_M_p is a wchar_t*)
542254721Semaste    lldb::TypeSummaryImplSP std_wstring_summary_sp(new StringSummaryFormat(stl_summary_flags,
543254721Semaste                                                                           "${var._M_dataplus._M_p%S}"));
544254721Semaste
545254721Semaste    gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::wstring"),
546254721Semaste                                                std_wstring_summary_sp);
547254721Semaste    gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<wchar_t>"),
548254721Semaste                                                std_wstring_summary_sp);
549254721Semaste    gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >"),
550254721Semaste                                                std_wstring_summary_sp);
551254721Semaste    gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >"),
552254721Semaste                                                std_wstring_summary_sp);
553254721Semaste
554254721Semaste
555254721Semaste#ifndef LLDB_DISABLE_PYTHON
556254721Semaste
557254721Semaste    SyntheticChildren::Flags stl_synth_flags;
558254721Semaste    stl_synth_flags.SetCascades(true).SetSkipPointers(false).SetSkipReferences(false);
559254721Semaste
560254721Semaste    gnu_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::vector<.+>(( )?&)?$")),
561254721Semaste                                                       SyntheticChildrenSP(new ScriptedSyntheticChildren(stl_synth_flags,
562254721Semaste                                                                                                 "lldb.formatters.cpp.gnu_libstdcpp.StdVectorSynthProvider")));
563254721Semaste    gnu_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::map<.+> >(( )?&)?$")),
564254721Semaste                                                       SyntheticChildrenSP(new ScriptedSyntheticChildren(stl_synth_flags,
565254721Semaste                                                                                                 "lldb.formatters.cpp.gnu_libstdcpp.StdMapSynthProvider")));
566254721Semaste    gnu_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::list<.+>(( )?&)?$")),
567254721Semaste                                                       SyntheticChildrenSP(new ScriptedSyntheticChildren(stl_synth_flags,
568254721Semaste                                                                                                 "lldb.formatters.cpp.gnu_libstdcpp.StdListSynthProvider")));
569254721Semaste
570254721Semaste    stl_summary_flags.SetDontShowChildren(false);stl_summary_flags.SetSkipPointers(true);
571254721Semaste    gnu_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::vector<.+>(( )?&)?$")),
572254721Semaste                                                     TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags,
573254721Semaste                                                                                               "size=${svar%#}")));
574254721Semaste    gnu_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::map<.+> >(( )?&)?$")),
575254721Semaste                                                     TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags,
576254721Semaste                                                                                               "size=${svar%#}")));
577254721Semaste    gnu_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::list<.+>(( )?&)?$")),
578254721Semaste                                                     TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags,
579254721Semaste                                                                                               "size=${svar%#}")));
580254721Semaste
581254721Semaste    AddCXXSynthetic(gnu_category_sp, lldb_private::formatters::LibStdcppVectorIteratorSyntheticFrontEndCreator, "std::vector iterator synthetic children", ConstString("^__gnu_cxx::__normal_iterator<.+>$"), stl_synth_flags, true);
582254721Semaste
583254721Semaste    AddCXXSynthetic(gnu_category_sp, lldb_private::formatters::LibstdcppMapIteratorSyntheticFrontEndCreator, "std::map iterator synthetic children", ConstString("^std::_Rb_tree_iterator<.+>$"), stl_synth_flags, true);
584254721Semaste
585254721Semaste    gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::vector<std::allocator<bool> >"),
586254721Semaste                                                   TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "size=${svar%#}")));
587254721Semaste
588254721Semaste    gnu_category_sp->GetSyntheticNavigator()->Add(ConstString("std::vector<std::allocator<bool> >"),
589254721Semaste                                                     SyntheticChildrenSP(new CXXSyntheticChildren(stl_synth_flags,"libc++ std::vector<bool> synthetic children",lldb_private::formatters::LibstdcppVectorBoolSyntheticFrontEndCreator)));
590254721Semaste
591254721Semaste#endif
592254721Semaste}
593254721Semaste
594254721Semastevoid
595254721SemasteFormatManager::LoadLibcxxFormatters()
596254721Semaste{
597254721Semaste    TypeSummaryImpl::Flags stl_summary_flags;
598254721Semaste    stl_summary_flags.SetCascades(true)
599254721Semaste    .SetSkipPointers(false)
600254721Semaste    .SetSkipReferences(false)
601254721Semaste    .SetDontShowChildren(true)
602254721Semaste    .SetDontShowValue(true)
603254721Semaste    .SetShowMembersOneLiner(false)
604254721Semaste    .SetHideItemNames(false);
605254721Semaste
606254721Semaste#ifndef LLDB_DISABLE_PYTHON
607254721Semaste    //std::string code("     lldb.formatters.cpp.libcxx.stdstring_SummaryProvider(valobj,internal_dict)");
608254721Semaste    //lldb::TypeSummaryImplSP std_string_summary_sp(new ScriptSummaryFormat(stl_summary_flags, "lldb.formatters.cpp.libcxx.stdstring_SummaryProvider",code.c_str()));
609254721Semaste
610254721Semaste    lldb::TypeSummaryImplSP std_string_summary_sp(new CXXFunctionSummaryFormat(stl_summary_flags, lldb_private::formatters::LibcxxStringSummaryProvider, "std::string summary provider"));
611254721Semaste    lldb::TypeSummaryImplSP std_wstring_summary_sp(new CXXFunctionSummaryFormat(stl_summary_flags, lldb_private::formatters::LibcxxWStringSummaryProvider, "std::wstring summary provider"));
612254721Semaste
613254721Semaste    TypeCategoryImpl::SharedPointer libcxx_category_sp = GetCategory(m_libcxx_category_name);
614254721Semaste
615254721Semaste    libcxx_category_sp->GetSummaryNavigator()->Add(ConstString("std::__1::string"),
616254721Semaste                                                   std_string_summary_sp);
617254721Semaste    libcxx_category_sp->GetSummaryNavigator()->Add(ConstString("std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >"),
618254721Semaste                                                   std_string_summary_sp);
619254721Semaste
620254721Semaste    libcxx_category_sp->GetSummaryNavigator()->Add(ConstString("std::__1::wstring"),
621254721Semaste                                                   std_wstring_summary_sp);
622254721Semaste    libcxx_category_sp->GetSummaryNavigator()->Add(ConstString("std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >"),
623254721Semaste                                                   std_wstring_summary_sp);
624254721Semaste
625254721Semaste    SyntheticChildren::Flags stl_synth_flags;
626254721Semaste    stl_synth_flags.SetCascades(true).SetSkipPointers(false).SetSkipReferences(false);
627254721Semaste
628254721Semaste    AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdVectorSyntheticFrontEndCreator, "libc++ std::vector synthetic children", ConstString("^std::__1::vector<.+>(( )?&)?$"), stl_synth_flags, true);
629254721Semaste    AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdListSyntheticFrontEndCreator, "libc++ std::list synthetic children", ConstString("^std::__1::list<.+>(( )?&)?$"), stl_synth_flags, true);
630254721Semaste    AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdMapSyntheticFrontEndCreator, "libc++ std::map synthetic children", ConstString("^std::__1::map<.+> >(( )?&)?$"), stl_synth_flags, true);
631254721Semaste    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);
632254721Semaste    AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdMapSyntheticFrontEndCreator, "libc++ std::set synthetic children", ConstString("^std::__1::set<.+> >(( )?&)?$"), stl_synth_flags, true);
633254721Semaste    AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdMapSyntheticFrontEndCreator, "libc++ std::multiset synthetic children", ConstString("^std::__1::multiset<.+> >(( )?&)?$"), stl_synth_flags, true);
634254721Semaste    AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdMapSyntheticFrontEndCreator, "libc++ std::multimap synthetic children", ConstString("^std::__1::multimap<.+> >(( )?&)?$"), stl_synth_flags, true);
635254721Semaste
636254721Semaste    libcxx_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^(std::__1::)deque<.+>(( )?&)?$")),
637254721Semaste                                                          SyntheticChildrenSP(new ScriptedSyntheticChildren(stl_synth_flags,
638254721Semaste                                                                                                    "lldb.formatters.cpp.libcxx.stddeque_SynthProvider")));
639254721Semaste
640254721Semaste    AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEndCreator, "shared_ptr synthetic children", ConstString("^(std::__1::)shared_ptr<.+>(( )?&)?$"), stl_synth_flags, true);
641254721Semaste    AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEndCreator, "weak_ptr synthetic children", ConstString("^(std::__1::)weak_ptr<.+>(( )?&)?$"), stl_synth_flags, true);
642254721Semaste
643254721Semaste    stl_summary_flags.SetDontShowChildren(false);stl_summary_flags.SetSkipPointers(false);
644254721Semaste
645254721Semaste    AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::vector summary provider", ConstString("^std::__1::vector<.+>(( )?&)?$"), stl_summary_flags, true);
646254721Semaste    AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::list summary provider", ConstString("^std::__1::list<.+>(( )?&)?$"), stl_summary_flags, true);
647254721Semaste    AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::map summary provider", ConstString("^std::__1::map<.+>(( )?&)?$"), stl_summary_flags, true);
648254721Semaste    AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::deque summary provider", ConstString("^std::__1::deque<.+>(( )?&)?$"), stl_summary_flags, true);
649254721Semaste    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);
650254721Semaste    AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::set summary provider", ConstString("^std::__1::set<.+>(( )?&)?$"), stl_summary_flags, true);
651254721Semaste    AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::multiset summary provider", ConstString("^std::__1::multiset<.+>(( )?&)?$"), stl_summary_flags, true);
652254721Semaste    AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::multimap summary provider", ConstString("^std::__1::multimap<.+>(( )?&)?$"), stl_summary_flags, true);
653254721Semaste
654254721Semaste    stl_summary_flags.SetSkipPointers(true);
655254721Semaste    AddStringSummary(libcxx_category_sp, "{${var.__ptr_%S}} (strong=${var.count} weak=${var.weak_count})}", ConstString("^std::__1::shared_ptr<.+>(( )?&)?$"), stl_summary_flags, true);
656254721Semaste    AddStringSummary(libcxx_category_sp, "{${var.__ptr_%S}} (strong=${var.count} weak=${var.weak_count})}", ConstString("^std::__1::weak_ptr<.+>(( )?&)?$"), stl_summary_flags, true);
657254721Semaste
658254721Semaste    AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibCxxVectorIteratorSyntheticFrontEndCreator, "std::vector iterator synthetic children", ConstString("^std::__1::__wrap_iter<.+>$"), stl_synth_flags, true);
659254721Semaste
660254721Semaste    AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibCxxMapIteratorSyntheticFrontEndCreator, "std::map iterator synthetic children", ConstString("^std::__1::__map_iterator<.+>$"), stl_synth_flags, true);
661254721Semaste
662254721Semaste#endif
663254721Semaste}
664254721Semaste
665254721Semastevoid
666254721SemasteFormatManager::LoadSystemFormatters()
667254721Semaste{
668254721Semaste
669254721Semaste    TypeSummaryImpl::Flags string_flags;
670254721Semaste    string_flags.SetCascades(true)
671254721Semaste    .SetSkipPointers(true)
672254721Semaste    .SetSkipReferences(false)
673254721Semaste    .SetDontShowChildren(true)
674254721Semaste    .SetDontShowValue(false)
675254721Semaste    .SetShowMembersOneLiner(false)
676254721Semaste    .SetHideItemNames(false);
677254721Semaste
678254721Semaste    lldb::TypeSummaryImplSP string_format(new StringSummaryFormat(string_flags, "${var%s}"));
679254721Semaste
680254721Semaste
681254721Semaste    lldb::TypeSummaryImplSP string_array_format(new StringSummaryFormat(TypeSummaryImpl::Flags().SetCascades(false)
682254721Semaste                                                                        .SetSkipPointers(true)
683254721Semaste                                                                        .SetSkipReferences(false)
684254721Semaste                                                                        .SetDontShowChildren(true)
685254721Semaste                                                                        .SetDontShowValue(true)
686254721Semaste                                                                        .SetShowMembersOneLiner(false)
687254721Semaste                                                                        .SetHideItemNames(false),
688254721Semaste                                                                        "${var%s}"));
689254721Semaste
690254721Semaste    lldb::RegularExpressionSP any_size_char_arr(new RegularExpression("char \\[[0-9]+\\]"));
691254721Semaste
692254721Semaste    TypeCategoryImpl::SharedPointer sys_category_sp = GetCategory(m_system_category_name);
693254721Semaste
694254721Semaste    sys_category_sp->GetSummaryNavigator()->Add(ConstString("char *"), string_format);
695254721Semaste    sys_category_sp->GetSummaryNavigator()->Add(ConstString("unsigned char *"), string_format);
696254721Semaste    sys_category_sp->GetRegexSummaryNavigator()->Add(any_size_char_arr, string_array_format);
697254721Semaste
698254721Semaste    lldb::TypeSummaryImplSP ostype_summary(new StringSummaryFormat(TypeSummaryImpl::Flags().SetCascades(false)
699254721Semaste                                                                   .SetSkipPointers(true)
700254721Semaste                                                                   .SetSkipReferences(true)
701254721Semaste                                                                   .SetDontShowChildren(true)
702254721Semaste                                                                   .SetDontShowValue(false)
703254721Semaste                                                                   .SetShowMembersOneLiner(false)
704254721Semaste                                                                   .SetHideItemNames(false),
705254721Semaste                                                                   "${var%O}"));
706254721Semaste
707254721Semaste    sys_category_sp->GetSummaryNavigator()->Add(ConstString("OSType"), ostype_summary);
708254721Semaste
709254721Semaste#ifndef LLDB_DISABLE_PYTHON
710254721Semaste    // FIXME because of a bug in the FormatNavigator we need to add a summary for both X* and const X* (<rdar://problem/12717717>)
711254721Semaste    AddCXXSummary(sys_category_sp, lldb_private::formatters::Char16StringSummaryProvider, "char16_t * summary provider", ConstString("char16_t *"), string_flags);
712254721Semaste
713254721Semaste    AddCXXSummary(sys_category_sp, lldb_private::formatters::Char32StringSummaryProvider, "char32_t * summary provider", ConstString("char32_t *"), string_flags);
714254721Semaste
715254721Semaste    AddCXXSummary(sys_category_sp, lldb_private::formatters::WCharStringSummaryProvider, "wchar_t * summary provider", ConstString("wchar_t *"), string_flags);
716254721Semaste
717254721Semaste    AddCXXSummary(sys_category_sp, lldb_private::formatters::Char16StringSummaryProvider, "unichar * summary provider", ConstString("unichar *"), string_flags);
718254721Semaste
719254721Semaste    TypeSummaryImpl::Flags widechar_flags;
720254721Semaste    widechar_flags.SetDontShowValue(true)
721254721Semaste    .SetSkipPointers(true)
722254721Semaste    .SetSkipReferences(false)
723254721Semaste    .SetCascades(true)
724254721Semaste    .SetDontShowChildren(true)
725254721Semaste    .SetHideItemNames(true)
726254721Semaste    .SetShowMembersOneLiner(false);
727254721Semaste
728254721Semaste    AddCXXSummary(sys_category_sp, lldb_private::formatters::Char16SummaryProvider, "char16_t summary provider", ConstString("char16_t"), widechar_flags);
729254721Semaste    AddCXXSummary(sys_category_sp, lldb_private::formatters::Char32SummaryProvider, "char32_t summary provider", ConstString("char32_t"), widechar_flags);
730254721Semaste    AddCXXSummary(sys_category_sp, lldb_private::formatters::WCharSummaryProvider, "wchar_t summary provider", ConstString("wchar_t"), widechar_flags);
731254721Semaste
732254721Semaste    AddCXXSummary(sys_category_sp, lldb_private::formatters::Char16SummaryProvider, "unichar summary provider", ConstString("unichar"), widechar_flags);
733254721Semaste
734254721Semaste#endif
735254721Semaste}
736254721Semaste
737254721Semastevoid
738254721SemasteFormatManager::LoadObjCFormatters()
739254721Semaste{
740254721Semaste    TypeSummaryImpl::Flags objc_flags;
741254721Semaste    objc_flags.SetCascades(false)
742254721Semaste    .SetSkipPointers(true)
743254721Semaste    .SetSkipReferences(true)
744254721Semaste    .SetDontShowChildren(true)
745254721Semaste    .SetDontShowValue(true)
746254721Semaste    .SetShowMembersOneLiner(false)
747254721Semaste    .SetHideItemNames(false);
748254721Semaste
749254721Semaste    TypeCategoryImpl::SharedPointer objc_category_sp = GetCategory(m_objc_category_name);
750254721Semaste
751254721Semaste    lldb::TypeSummaryImplSP ObjC_BOOL_summary(new CXXFunctionSummaryFormat(objc_flags, lldb_private::formatters::ObjCBOOLSummaryProvider,""));
752254721Semaste    objc_category_sp->GetSummaryNavigator()->Add(ConstString("BOOL"),
753254721Semaste                                                 ObjC_BOOL_summary);
754254721Semaste    objc_category_sp->GetSummaryNavigator()->Add(ConstString("BOOL &"),
755254721Semaste                                                 ObjC_BOOL_summary);
756254721Semaste    objc_category_sp->GetSummaryNavigator()->Add(ConstString("BOOL *"),
757254721Semaste                                                 ObjC_BOOL_summary);
758254721Semaste
759254721Semaste#ifndef LLDB_DISABLE_PYTHON
760254721Semaste    // we need to skip pointers here since we are special casing a SEL* when retrieving its value
761254721Semaste    objc_flags.SetSkipPointers(true);
762254721Semaste    AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<false>, "SEL summary provider", ConstString("SEL"), objc_flags);
763254721Semaste    AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<false>, "SEL summary provider", ConstString("struct objc_selector"), objc_flags);
764254721Semaste    AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<false>, "SEL summary provider", ConstString("objc_selector"), objc_flags);
765254721Semaste    AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<true>, "SEL summary provider", ConstString("objc_selector *"), objc_flags);
766254721Semaste    AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<true>, "SEL summary provider", ConstString("SEL *"), objc_flags);
767254721Semaste
768254721Semaste    AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCClassSummaryProvider, "Class summary provider", ConstString("Class"), objc_flags);
769254721Semaste
770254721Semaste    SyntheticChildren::Flags class_synth_flags;
771254721Semaste    class_synth_flags.SetCascades(true).SetSkipPointers(false).SetSkipReferences(false);
772254721Semaste
773254721Semaste    AddCXXSynthetic(objc_category_sp, lldb_private::formatters::ObjCClassSyntheticFrontEndCreator, "Class synthetic children", ConstString("Class"), class_synth_flags);
774254721Semaste#endif // LLDB_DISABLE_PYTHON
775254721Semaste
776254721Semaste    objc_flags.SetSkipPointers(false);
777254721Semaste    objc_flags.SetCascades(true);
778254721Semaste    objc_flags.SetSkipReferences(false);
779254721Semaste
780254721Semaste    AddStringSummary (objc_category_sp,
781254721Semaste                      "${var.__FuncPtr%A}",
782254721Semaste                      ConstString("__block_literal_generic"),
783254721Semaste                      objc_flags);
784254721Semaste
785254721Semaste    TypeCategoryImpl::SharedPointer corefoundation_category_sp = GetCategory(m_corefoundation_category_name);
786254721Semaste
787254721Semaste    AddStringSummary(corefoundation_category_sp,
788254721Semaste                     "${var.years} years, ${var.months} months, ${var.days} days, ${var.hours} hours, ${var.minutes} minutes ${var.seconds} seconds",
789254721Semaste                     ConstString("CFGregorianUnits"),
790254721Semaste                     objc_flags);
791254721Semaste    AddStringSummary(corefoundation_category_sp,
792254721Semaste                     "location=${var.location} length=${var.length}",
793254721Semaste                     ConstString("CFRange"),
794254721Semaste                     objc_flags);
795254721Semaste    AddStringSummary(corefoundation_category_sp,
796254721Semaste                     "(x=${var.x}, y=${var.y})",
797254721Semaste                     ConstString("NSPoint"),
798254721Semaste                     objc_flags);
799254721Semaste    AddStringSummary(corefoundation_category_sp,
800254721Semaste                     "location=${var.location}, length=${var.length}",
801254721Semaste                     ConstString("NSRange"),
802254721Semaste                     objc_flags);
803254721Semaste    AddStringSummary(corefoundation_category_sp,
804254721Semaste                     "${var.origin}, ${var.size}",
805254721Semaste                     ConstString("NSRect"),
806254721Semaste                     objc_flags);
807254721Semaste    AddStringSummary(corefoundation_category_sp,
808254721Semaste                     "(${var.origin}, ${var.size}), ...",
809254721Semaste                     ConstString("NSRectArray"),
810254721Semaste                     objc_flags);
811254721Semaste    AddStringSummary(objc_category_sp,
812254721Semaste                     "(width=${var.width}, height=${var.height})",
813254721Semaste                     ConstString("NSSize"),
814254721Semaste                     objc_flags);
815254721Semaste
816254721Semaste    TypeCategoryImpl::SharedPointer coregraphics_category_sp = GetCategory(m_coregraphics_category_name);
817254721Semaste
818254721Semaste    AddStringSummary(coregraphics_category_sp,
819254721Semaste                     "(width=${var.width}, height=${var.height})",
820254721Semaste                     ConstString("CGSize"),
821254721Semaste                     objc_flags);
822254721Semaste    AddStringSummary(coregraphics_category_sp,
823254721Semaste                     "(x=${var.x}, y=${var.y})",
824254721Semaste                     ConstString("CGPoint"),
825254721Semaste                     objc_flags);
826254721Semaste    AddStringSummary(coregraphics_category_sp,
827254721Semaste                     "origin=${var.origin} size=${var.size}",
828254721Semaste                     ConstString("CGRect"),
829254721Semaste                     objc_flags);
830254721Semaste
831254721Semaste    TypeCategoryImpl::SharedPointer coreservices_category_sp = GetCategory(m_coreservices_category_name);
832254721Semaste
833254721Semaste    AddStringSummary(coreservices_category_sp,
834254721Semaste                     "red=${var.red} green=${var.green} blue=${var.blue}",
835254721Semaste                     ConstString("RGBColor"),
836254721Semaste                     objc_flags);
837254721Semaste    AddStringSummary(coreservices_category_sp,
838254721Semaste                     "(t=${var.top}, l=${var.left}, b=${var.bottom}, r=${var.right})",
839254721Semaste                     ConstString("Rect"),
840254721Semaste                     objc_flags);
841254721Semaste    AddStringSummary(coreservices_category_sp,
842254721Semaste                     "(v=${var.v}, h=${var.h})",
843254721Semaste                     ConstString("Point"),
844254721Semaste                     objc_flags);
845254721Semaste    AddStringSummary(coreservices_category_sp,
846254721Semaste                     "${var.month}/${var.day}/${var.year}  ${var.hour} :${var.minute} :${var.second} dayOfWeek:${var.dayOfWeek}",
847254721Semaste                     ConstString("DateTimeRect *"),
848254721Semaste                     objc_flags);
849254721Semaste    AddStringSummary(coreservices_category_sp,
850254721Semaste                     "${var.ld.month}/${var.ld.day}/${var.ld.year} ${var.ld.hour} :${var.ld.minute} :${var.ld.second} dayOfWeek:${var.ld.dayOfWeek}",
851254721Semaste                     ConstString("LongDateRect"),
852254721Semaste                     objc_flags);
853254721Semaste    AddStringSummary(coreservices_category_sp,
854254721Semaste                     "(x=${var.x}, y=${var.y})",
855254721Semaste                     ConstString("HIPoint"),
856254721Semaste                     objc_flags);
857254721Semaste    AddStringSummary(coreservices_category_sp,
858254721Semaste                     "origin=${var.origin} size=${var.size}",
859254721Semaste                     ConstString("HIRect"),
860254721Semaste                     objc_flags);
861254721Semaste
862254721Semaste    TypeCategoryImpl::SharedPointer appkit_category_sp = GetCategory(m_appkit_category_name);
863254721Semaste
864254721Semaste    TypeSummaryImpl::Flags appkit_flags;
865254721Semaste    appkit_flags.SetCascades(true)
866254721Semaste    .SetSkipPointers(false)
867254721Semaste    .SetSkipReferences(false)
868254721Semaste    .SetDontShowChildren(true)
869254721Semaste    .SetDontShowValue(false)
870254721Semaste    .SetShowMembersOneLiner(false)
871254721Semaste    .SetHideItemNames(false);
872254721Semaste
873254721Semaste    appkit_flags.SetDontShowChildren(false);
874254721Semaste
875254721Semaste
876254721Semaste#ifndef LLDB_DISABLE_PYTHON
877254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("NSArray"), appkit_flags);
878254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("NSMutableArray"), appkit_flags);
879254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("__NSArrayI"), appkit_flags);
880254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("__NSArrayM"), appkit_flags);
881254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("__NSCFArray"), appkit_flags);
882254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("CFArrayRef"), appkit_flags);
883254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("CFMutableArrayRef"), appkit_flags);
884254721Semaste
885254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("NSDictionary"), appkit_flags);
886254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("NSMutableDictionary"), appkit_flags);
887254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("__NSCFDictionary"), appkit_flags);
888254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("__NSDictionaryI"), appkit_flags);
889254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("__NSDictionaryM"), appkit_flags);
890254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<true>, "NSDictionary summary provider", ConstString("CFDictionaryRef"), appkit_flags);
891254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<true>, "NSDictionary summary provider", ConstString("CFMutableDictionaryRef"), appkit_flags);
892254721Semaste
893254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "NSSet summary", ConstString("NSSet"), appkit_flags);
894254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "NSMutableSet summary", ConstString("NSMutableSet"), appkit_flags);
895254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<true>, "CFSetRef summary", ConstString("CFSetRef"), appkit_flags);
896254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<true>, "CFMutableSetRef summary", ConstString("CFMutableSetRef"), appkit_flags);
897254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "__NSCFSet summary", ConstString("__NSCFSet"), appkit_flags);
898254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "__NSSetI summary", ConstString("__NSSetI"), appkit_flags);
899254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "__NSSetM summary", ConstString("__NSSetM"), appkit_flags);
900254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "NSCountedSet summary", ConstString("NSCountedSet"), appkit_flags);
901254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "NSMutableSet summary", ConstString("NSMutableSet"), appkit_flags);
902254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "NSOrderedSet summary", ConstString("NSOrderedSet"), appkit_flags);
903254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "__NSOrderedSetI summary", ConstString("__NSOrderedSetI"), appkit_flags);
904254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSSetSummaryProvider<false>, "__NSOrderedSetM summary", ConstString("__NSOrderedSetM"), appkit_flags);
905254721Semaste
906254721Semaste    // AddSummary(appkit_category_sp, "${var.key%@} -> ${var.value%@}", ConstString("$_lldb_typegen_nspair"), appkit_flags);
907254721Semaste
908254721Semaste    appkit_flags.SetDontShowChildren(true);
909254721Semaste
910254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("__NSArrayM"), ScriptedSyntheticChildren::Flags());
911254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("__NSArrayI"), ScriptedSyntheticChildren::Flags());
912254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("NSArray"), ScriptedSyntheticChildren::Flags());
913254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("NSMutableArray"), ScriptedSyntheticChildren::Flags());
914254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("__NSCFArray"), ScriptedSyntheticChildren::Flags());
915254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("CFMutableArrayRef"), ScriptedSyntheticChildren::Flags());
916254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("CFArrayRef"), ScriptedSyntheticChildren::Flags());
917254721Semaste
918254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("__NSDictionaryM"), ScriptedSyntheticChildren::Flags());
919254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("__NSDictionaryI"), ScriptedSyntheticChildren::Flags());
920254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("NSDictionary"), ScriptedSyntheticChildren::Flags());
921254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("NSMutableDictionary"), ScriptedSyntheticChildren::Flags());
922254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("CFDictionaryRef"), ScriptedSyntheticChildren::Flags());
923254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("CFMutableDictionaryRef"), ScriptedSyntheticChildren::Flags());
924254721Semaste
925254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSSetSyntheticFrontEndCreator, "NSSet synthetic children", ConstString("NSSet"), ScriptedSyntheticChildren::Flags());
926254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSSetSyntheticFrontEndCreator, "__NSSetI synthetic children", ConstString("__NSSetI"), ScriptedSyntheticChildren::Flags());
927254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSSetSyntheticFrontEndCreator, "__NSSetM synthetic children", ConstString("__NSSetM"), ScriptedSyntheticChildren::Flags());
928254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSSetSyntheticFrontEndCreator, "NSMutableSet synthetic children", ConstString("NSMutableSet"), ScriptedSyntheticChildren::Flags());
929254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSSetSyntheticFrontEndCreator, "NSOrderedSet synthetic children", ConstString("NSOrderedSet"), ScriptedSyntheticChildren::Flags());
930254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSSetSyntheticFrontEndCreator, "__NSOrderedSetI synthetic children", ConstString("__NSOrderedSetI"), ScriptedSyntheticChildren::Flags());
931254721Semaste    AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSSetSyntheticFrontEndCreator, "__NSOrderedSetM synthetic children", ConstString("__NSOrderedSetM"), ScriptedSyntheticChildren::Flags());
932254721Semaste
933254721Semaste    AddCXXSummary(appkit_category_sp,lldb_private::formatters::CFBagSummaryProvider, "CFBag summary provider", ConstString("CFBagRef"), appkit_flags);
934254721Semaste    AddCXXSummary(appkit_category_sp,lldb_private::formatters::CFBagSummaryProvider, "CFBag summary provider", ConstString("__CFBag"), appkit_flags);
935254721Semaste    AddCXXSummary(appkit_category_sp,lldb_private::formatters::CFBagSummaryProvider, "CFBag summary provider", ConstString("const struct __CFBag"), appkit_flags);
936254721Semaste    AddCXXSummary(appkit_category_sp,lldb_private::formatters::CFBagSummaryProvider, "CFBag summary provider", ConstString("CFMutableBagRef"), appkit_flags);
937254721Semaste
938254721Semaste    AddCXXSummary(appkit_category_sp,lldb_private::formatters::CFBinaryHeapSummaryProvider, "CFBinaryHeap summary provider", ConstString("CFBinaryHeapRef"), appkit_flags);
939254721Semaste    AddCXXSummary(appkit_category_sp,lldb_private::formatters::CFBinaryHeapSummaryProvider, "CFBinaryHeap summary provider", ConstString("__CFBinaryHeap"), appkit_flags);
940254721Semaste
941254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSString"), appkit_flags);
942254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("CFStringRef"), appkit_flags);
943254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("CFMutableStringRef"), appkit_flags);
944254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSMutableString"), appkit_flags);
945254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("__NSCFConstantString"), appkit_flags);
946254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("__NSCFString"), appkit_flags);
947254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSCFConstantString"), appkit_flags);
948254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSCFString"), appkit_flags);
949254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSPathStore2"), appkit_flags);
950254721Semaste
951254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSAttributedStringSummaryProvider, "NSAttributedString summary provider", ConstString("NSAttributedString"), appkit_flags);
952254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSMutableAttributedStringSummaryProvider, "NSMutableAttributedString summary provider", ConstString("NSMutableAttributedString"), appkit_flags);
953254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSMutableAttributedStringSummaryProvider, "NSMutableAttributedString summary provider", ConstString("NSConcreteMutableAttributedString"), appkit_flags);
954254721Semaste
955254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSBundleSummaryProvider, "NSBundle summary provider", ConstString("NSBundle"), appkit_flags);
956254721Semaste
957254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("NSData"), appkit_flags);
958254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("NSConcreteData"), appkit_flags);
959254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("NSConcreteMutableData"), appkit_flags);
960254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("__NSCFData"), appkit_flags);
961254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<true>, "NSData summary provider", ConstString("CFDataRef"), appkit_flags);
962254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<true>, "NSData summary provider", ConstString("CFMutableDataRef"), appkit_flags);
963254721Semaste
964254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSMachPortSummaryProvider, "NSMachPort summary provider", ConstString("NSMachPort"), appkit_flags);
965254721Semaste
966254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNotificationSummaryProvider, "NSNotification summary provider", ConstString("NSNotification"), appkit_flags);
967254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNotificationSummaryProvider, "NSNotification summary provider", ConstString("NSConcreteNotification"), appkit_flags);
968254721Semaste
969254721Semaste    AddStringSummary(appkit_category_sp, "domain: ${var._domain} - code: ${var._code}", ConstString("NSError"), appkit_flags);
970254721Semaste    AddStringSummary(appkit_category_sp,"name:${var.name%S} reason:${var.reason%S}",ConstString("NSException"),appkit_flags);
971254721Semaste
972254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("NSNumber"), appkit_flags);
973254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("__NSCFBoolean"), appkit_flags);
974254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("__NSCFNumber"), appkit_flags);
975254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("NSCFBoolean"), appkit_flags);
976254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("NSCFNumber"), appkit_flags);
977254721Semaste
978254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::RuntimeSpecificDescriptionSummaryProvider, "NSDecimalNumber summary provider", ConstString("NSDecimalNumber"), appkit_flags);
979254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::RuntimeSpecificDescriptionSummaryProvider, "NSHost summary provider", ConstString("NSHost"), appkit_flags);
980254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::RuntimeSpecificDescriptionSummaryProvider, "NSTask summary provider", ConstString("NSTask"), appkit_flags);
981254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::RuntimeSpecificDescriptionSummaryProvider, "NSValue summary provider", ConstString("NSValue"), appkit_flags);
982254721Semaste
983254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSURLSummaryProvider, "NSURL summary provider", ConstString("NSURL"), appkit_flags);
984254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSURLSummaryProvider, "NSURL summary provider", ConstString("CFURLRef"), appkit_flags);
985254721Semaste
986254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDateSummaryProvider, "NSDate summary provider", ConstString("NSDate"), appkit_flags);
987254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDateSummaryProvider, "NSDate summary provider", ConstString("__NSDate"), appkit_flags);
988254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDateSummaryProvider, "NSDate summary provider", ConstString("__NSTaggedDate"), appkit_flags);
989254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDateSummaryProvider, "NSDate summary provider", ConstString("NSCalendarDate"), appkit_flags);
990254721Semaste
991254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSTimeZoneSummaryProvider, "NSTimeZone summary provider", ConstString("NSTimeZone"), appkit_flags);
992254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSTimeZoneSummaryProvider, "NSTimeZone summary provider", ConstString("CFTimeZoneRef"), appkit_flags);
993254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSTimeZoneSummaryProvider, "NSTimeZone summary provider", ConstString("__NSTimeZone"), appkit_flags);
994254721Semaste
995254721Semaste    // CFAbsoluteTime is actually a double rather than a pointer to an object
996254721Semaste    // we do not care about the numeric value, since it is probably meaningless to users
997254721Semaste    appkit_flags.SetDontShowValue(true);
998254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::CFAbsoluteTimeSummaryProvider, "CFAbsoluteTime summary provider", ConstString("CFAbsoluteTime"), appkit_flags);
999254721Semaste    appkit_flags.SetDontShowValue(false);
1000254721Semaste
1001254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSIndexSetSummaryProvider, "NSIndexSet summary provider", ConstString("NSIndexSet"), appkit_flags);
1002254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSIndexSetSummaryProvider, "NSIndexSet summary provider", ConstString("NSMutableIndexSet"), appkit_flags);
1003254721Semaste
1004254721Semaste    AddStringSummary(appkit_category_sp,
1005254721Semaste                     "@\"${var.month%d}/${var.day%d}/${var.year%d} ${var.hour%d}:${var.minute%d}:${var.second}\"",
1006254721Semaste                     ConstString("CFGregorianDate"),
1007254721Semaste                     appkit_flags);
1008254721Semaste
1009254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::CFBitVectorSummaryProvider, "CFBitVector summary provider", ConstString("CFBitVectorRef"), appkit_flags);
1010254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::CFBitVectorSummaryProvider, "CFBitVector summary provider", ConstString("CFMutableBitVectorRef"), appkit_flags);
1011254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::CFBitVectorSummaryProvider, "CFBitVector summary provider", ConstString("__CFBitVector"), appkit_flags);
1012254721Semaste    AddCXXSummary(appkit_category_sp, lldb_private::formatters::CFBitVectorSummaryProvider, "CFBitVector summary provider", ConstString("__CFMutableBitVector"), appkit_flags);
1013254721Semaste#endif // LLDB_DISABLE_PYTHON
1014254721Semaste
1015254721Semaste    TypeCategoryImpl::SharedPointer vectors_category_sp = GetCategory(m_vectortypes_category_name);
1016254721Semaste
1017254721Semaste    TypeSummaryImpl::Flags vector_flags;
1018254721Semaste    vector_flags.SetCascades(true)
1019254721Semaste    .SetSkipPointers(true)
1020254721Semaste    .SetSkipReferences(false)
1021254721Semaste    .SetDontShowChildren(true)
1022254721Semaste    .SetDontShowValue(false)
1023254721Semaste    .SetShowMembersOneLiner(true)
1024254721Semaste    .SetHideItemNames(true);
1025254721Semaste
1026254721Semaste    AddStringSummary(vectors_category_sp,
1027254721Semaste                     "${var.uint128}",
1028254721Semaste                     ConstString("builtin_type_vec128"),
1029254721Semaste                     objc_flags);
1030254721Semaste
1031254721Semaste    AddStringSummary(vectors_category_sp,
1032254721Semaste                     "",
1033254721Semaste                     ConstString("float [4]"),
1034254721Semaste                     vector_flags);
1035254721Semaste    AddStringSummary(vectors_category_sp,
1036254721Semaste                     "",
1037254721Semaste                     ConstString("int32_t [4]"),
1038254721Semaste                     vector_flags);
1039254721Semaste    AddStringSummary(vectors_category_sp,
1040254721Semaste                     "",
1041254721Semaste                     ConstString("int16_t [8]"),
1042254721Semaste                     vector_flags);
1043254721Semaste    AddStringSummary(vectors_category_sp,
1044254721Semaste                     "",
1045254721Semaste                     ConstString("vDouble"),
1046254721Semaste                     vector_flags);
1047254721Semaste    AddStringSummary(vectors_category_sp,
1048254721Semaste                     "",
1049254721Semaste                     ConstString("vFloat"),
1050254721Semaste                     vector_flags);
1051254721Semaste    AddStringSummary(vectors_category_sp,
1052254721Semaste                     "",
1053254721Semaste                     ConstString("vSInt8"),
1054254721Semaste                     vector_flags);
1055254721Semaste    AddStringSummary(vectors_category_sp,
1056254721Semaste                     "",
1057254721Semaste                     ConstString("vSInt16"),
1058254721Semaste                     vector_flags);
1059254721Semaste    AddStringSummary(vectors_category_sp,
1060254721Semaste                     "",
1061254721Semaste                     ConstString("vSInt32"),
1062254721Semaste                     vector_flags);
1063254721Semaste    AddStringSummary(vectors_category_sp,
1064254721Semaste                     "",
1065254721Semaste                     ConstString("vUInt16"),
1066254721Semaste                     vector_flags);
1067254721Semaste    AddStringSummary(vectors_category_sp,
1068254721Semaste                     "",
1069254721Semaste                     ConstString("vUInt8"),
1070254721Semaste                     vector_flags);
1071254721Semaste    AddStringSummary(vectors_category_sp,
1072254721Semaste                     "",
1073254721Semaste                     ConstString("vUInt16"),
1074254721Semaste                     vector_flags);
1075254721Semaste    AddStringSummary(vectors_category_sp,
1076254721Semaste                     "",
1077254721Semaste                     ConstString("vUInt32"),
1078254721Semaste                     vector_flags);
1079254721Semaste    AddStringSummary(vectors_category_sp,
1080254721Semaste                     "",
1081254721Semaste                     ConstString("vBool32"),
1082254721Semaste                     vector_flags);
1083254721Semaste}
1084