1*5548cb50SEnrico Granata //===-- FormatManager.cpp -------------------------------------------*- C++ -*-===// 2*5548cb50SEnrico Granata // 3*5548cb50SEnrico Granata // The LLVM Compiler Infrastructure 4*5548cb50SEnrico Granata // 5*5548cb50SEnrico Granata // This file is distributed under the University of Illinois Open Source 6*5548cb50SEnrico Granata // License. See LICENSE.TXT for details. 7*5548cb50SEnrico Granata // 8*5548cb50SEnrico Granata //===----------------------------------------------------------------------===// 9*5548cb50SEnrico Granata 10*5548cb50SEnrico Granata #include "lldb/lldb-python.h" 11*5548cb50SEnrico Granata 12*5548cb50SEnrico Granata #include "lldb/DataFormatters/FormatManager.h" 13*5548cb50SEnrico Granata 14*5548cb50SEnrico Granata // C Includes 15*5548cb50SEnrico Granata // C++ Includes 16*5548cb50SEnrico Granata // Other libraries and framework includes 17*5548cb50SEnrico Granata // Project includes 18*5548cb50SEnrico Granata 19*5548cb50SEnrico Granata #include "lldb/Core/Debugger.h" 20*5548cb50SEnrico Granata #include "lldb/DataFormatters/CXXFormatterFunctions.h" 21*5548cb50SEnrico Granata #include "lldb/Interpreter/ScriptInterpreterPython.h" 22*5548cb50SEnrico Granata #include "lldb/Target/ExecutionContext.h" 23*5548cb50SEnrico Granata #include "lldb/Target/Platform.h" 24*5548cb50SEnrico Granata 25*5548cb50SEnrico Granata using namespace lldb; 26*5548cb50SEnrico Granata using namespace lldb_private; 27*5548cb50SEnrico Granata 28*5548cb50SEnrico Granata 29*5548cb50SEnrico Granata struct FormatInfo 30*5548cb50SEnrico Granata { 31*5548cb50SEnrico Granata Format format; 32*5548cb50SEnrico Granata const char format_char; // One or more format characters that can be used for this format. 33*5548cb50SEnrico Granata const char *format_name; // Long format name that can be used to specify the current format 34*5548cb50SEnrico Granata }; 35*5548cb50SEnrico Granata 36*5548cb50SEnrico Granata static FormatInfo 37*5548cb50SEnrico Granata g_format_infos[] = 38*5548cb50SEnrico Granata { 39*5548cb50SEnrico Granata { eFormatDefault , '\0' , "default" }, 40*5548cb50SEnrico Granata { eFormatBoolean , 'B' , "boolean" }, 41*5548cb50SEnrico Granata { eFormatBinary , 'b' , "binary" }, 42*5548cb50SEnrico Granata { eFormatBytes , 'y' , "bytes" }, 43*5548cb50SEnrico Granata { eFormatBytesWithASCII , 'Y' , "bytes with ASCII" }, 44*5548cb50SEnrico Granata { eFormatChar , 'c' , "character" }, 45*5548cb50SEnrico Granata { eFormatCharPrintable , 'C' , "printable character" }, 46*5548cb50SEnrico Granata { eFormatComplexFloat , 'F' , "complex float" }, 47*5548cb50SEnrico Granata { eFormatCString , 's' , "c-string" }, 48*5548cb50SEnrico Granata { eFormatDecimal , 'd' , "decimal" }, 49*5548cb50SEnrico Granata { eFormatEnum , 'E' , "enumeration" }, 50*5548cb50SEnrico Granata { eFormatHex , 'x' , "hex" }, 51*5548cb50SEnrico Granata { eFormatHexUppercase , 'X' , "uppercase hex" }, 52*5548cb50SEnrico Granata { eFormatFloat , 'f' , "float" }, 53*5548cb50SEnrico Granata { eFormatOctal , 'o' , "octal" }, 54*5548cb50SEnrico Granata { eFormatOSType , 'O' , "OSType" }, 55*5548cb50SEnrico Granata { eFormatUnicode16 , 'U' , "unicode16" }, 56*5548cb50SEnrico Granata { eFormatUnicode32 , '\0' , "unicode32" }, 57*5548cb50SEnrico Granata { eFormatUnsigned , 'u' , "unsigned decimal" }, 58*5548cb50SEnrico Granata { eFormatPointer , 'p' , "pointer" }, 59*5548cb50SEnrico Granata { eFormatVectorOfChar , '\0' , "char[]" }, 60*5548cb50SEnrico Granata { eFormatVectorOfSInt8 , '\0' , "int8_t[]" }, 61*5548cb50SEnrico Granata { eFormatVectorOfUInt8 , '\0' , "uint8_t[]" }, 62*5548cb50SEnrico Granata { eFormatVectorOfSInt16 , '\0' , "int16_t[]" }, 63*5548cb50SEnrico Granata { eFormatVectorOfUInt16 , '\0' , "uint16_t[]" }, 64*5548cb50SEnrico Granata { eFormatVectorOfSInt32 , '\0' , "int32_t[]" }, 65*5548cb50SEnrico Granata { eFormatVectorOfUInt32 , '\0' , "uint32_t[]" }, 66*5548cb50SEnrico Granata { eFormatVectorOfSInt64 , '\0' , "int64_t[]" }, 67*5548cb50SEnrico Granata { eFormatVectorOfUInt64 , '\0' , "uint64_t[]" }, 68*5548cb50SEnrico Granata { eFormatVectorOfFloat32, '\0' , "float32[]" }, 69*5548cb50SEnrico Granata { eFormatVectorOfFloat64, '\0' , "float64[]" }, 70*5548cb50SEnrico Granata { eFormatVectorOfUInt128, '\0' , "uint128_t[]" }, 71*5548cb50SEnrico Granata { eFormatComplexInteger , 'I' , "complex integer" }, 72*5548cb50SEnrico Granata { eFormatCharArray , 'a' , "character array" }, 73*5548cb50SEnrico Granata { eFormatAddressInfo , 'A' , "address" }, 74*5548cb50SEnrico Granata { eFormatHexFloat , '\0' , "hex float" }, 75*5548cb50SEnrico Granata { eFormatInstruction , 'i' , "instruction" }, 76*5548cb50SEnrico Granata { eFormatVoid , 'v' , "void" } 77*5548cb50SEnrico Granata }; 78*5548cb50SEnrico Granata 79*5548cb50SEnrico Granata static uint32_t 80*5548cb50SEnrico Granata g_num_format_infos = sizeof(g_format_infos)/sizeof(FormatInfo); 81*5548cb50SEnrico Granata 82*5548cb50SEnrico Granata static bool 83*5548cb50SEnrico Granata GetFormatFromFormatChar (char format_char, Format &format) 84*5548cb50SEnrico Granata { 85*5548cb50SEnrico Granata for (uint32_t i=0; i<g_num_format_infos; ++i) 86*5548cb50SEnrico Granata { 87*5548cb50SEnrico Granata if (g_format_infos[i].format_char == format_char) 88*5548cb50SEnrico Granata { 89*5548cb50SEnrico Granata format = g_format_infos[i].format; 90*5548cb50SEnrico Granata return true; 91*5548cb50SEnrico Granata } 92*5548cb50SEnrico Granata } 93*5548cb50SEnrico Granata format = eFormatInvalid; 94*5548cb50SEnrico Granata return false; 95*5548cb50SEnrico Granata } 96*5548cb50SEnrico Granata 97*5548cb50SEnrico Granata static bool 98*5548cb50SEnrico Granata GetFormatFromFormatName (const char *format_name, bool partial_match_ok, Format &format) 99*5548cb50SEnrico Granata { 100*5548cb50SEnrico Granata uint32_t i; 101*5548cb50SEnrico Granata for (i=0; i<g_num_format_infos; ++i) 102*5548cb50SEnrico Granata { 103*5548cb50SEnrico Granata if (strcasecmp (g_format_infos[i].format_name, format_name) == 0) 104*5548cb50SEnrico Granata { 105*5548cb50SEnrico Granata format = g_format_infos[i].format; 106*5548cb50SEnrico Granata return true; 107*5548cb50SEnrico Granata } 108*5548cb50SEnrico Granata } 109*5548cb50SEnrico Granata 110*5548cb50SEnrico Granata if (partial_match_ok) 111*5548cb50SEnrico Granata { 112*5548cb50SEnrico Granata for (i=0; i<g_num_format_infos; ++i) 113*5548cb50SEnrico Granata { 114*5548cb50SEnrico Granata if (strcasestr (g_format_infos[i].format_name, format_name) == g_format_infos[i].format_name) 115*5548cb50SEnrico Granata { 116*5548cb50SEnrico Granata format = g_format_infos[i].format; 117*5548cb50SEnrico Granata return true; 118*5548cb50SEnrico Granata } 119*5548cb50SEnrico Granata } 120*5548cb50SEnrico Granata } 121*5548cb50SEnrico Granata format = eFormatInvalid; 122*5548cb50SEnrico Granata return false; 123*5548cb50SEnrico Granata } 124*5548cb50SEnrico Granata 125*5548cb50SEnrico Granata bool 126*5548cb50SEnrico Granata FormatManager::GetFormatFromCString (const char *format_cstr, 127*5548cb50SEnrico Granata bool partial_match_ok, 128*5548cb50SEnrico Granata lldb::Format &format) 129*5548cb50SEnrico Granata { 130*5548cb50SEnrico Granata bool success = false; 131*5548cb50SEnrico Granata if (format_cstr && format_cstr[0]) 132*5548cb50SEnrico Granata { 133*5548cb50SEnrico Granata if (format_cstr[1] == '\0') 134*5548cb50SEnrico Granata { 135*5548cb50SEnrico Granata success = GetFormatFromFormatChar (format_cstr[0], format); 136*5548cb50SEnrico Granata if (success) 137*5548cb50SEnrico Granata return true; 138*5548cb50SEnrico Granata } 139*5548cb50SEnrico Granata 140*5548cb50SEnrico Granata success = GetFormatFromFormatName (format_cstr, partial_match_ok, format); 141*5548cb50SEnrico Granata } 142*5548cb50SEnrico Granata if (!success) 143*5548cb50SEnrico Granata format = eFormatInvalid; 144*5548cb50SEnrico Granata return success; 145*5548cb50SEnrico Granata } 146*5548cb50SEnrico Granata 147*5548cb50SEnrico Granata char 148*5548cb50SEnrico Granata FormatManager::GetFormatAsFormatChar (lldb::Format format) 149*5548cb50SEnrico Granata { 150*5548cb50SEnrico Granata for (uint32_t i=0; i<g_num_format_infos; ++i) 151*5548cb50SEnrico Granata { 152*5548cb50SEnrico Granata if (g_format_infos[i].format == format) 153*5548cb50SEnrico Granata return g_format_infos[i].format_char; 154*5548cb50SEnrico Granata } 155*5548cb50SEnrico Granata return '\0'; 156*5548cb50SEnrico Granata } 157*5548cb50SEnrico Granata 158*5548cb50SEnrico Granata const char * 159*5548cb50SEnrico Granata FormatManager::GetFormatAsCString (Format format) 160*5548cb50SEnrico Granata { 161*5548cb50SEnrico Granata if (format >= eFormatDefault && format < kNumFormats) 162*5548cb50SEnrico Granata return g_format_infos[format].format_name; 163*5548cb50SEnrico Granata return NULL; 164*5548cb50SEnrico Granata } 165*5548cb50SEnrico Granata 166*5548cb50SEnrico Granata lldb::TypeSummaryImplSP 167*5548cb50SEnrico Granata FormatManager::GetSummaryForType (lldb::TypeNameSpecifierImplSP type_sp) 168*5548cb50SEnrico Granata { 169*5548cb50SEnrico Granata if (!type_sp) 170*5548cb50SEnrico Granata return lldb::TypeSummaryImplSP(); 171*5548cb50SEnrico Granata lldb::TypeSummaryImplSP summary_chosen_sp; 172*5548cb50SEnrico Granata uint32_t num_categories = m_categories_map.GetCount(); 173*5548cb50SEnrico Granata lldb::TypeCategoryImplSP category_sp; 174*5548cb50SEnrico Granata uint32_t prio_category = UINT32_MAX; 175*5548cb50SEnrico Granata for (uint32_t category_id = 0; 176*5548cb50SEnrico Granata category_id < num_categories; 177*5548cb50SEnrico Granata category_id++) 178*5548cb50SEnrico Granata { 179*5548cb50SEnrico Granata category_sp = GetCategoryAtIndex(category_id); 180*5548cb50SEnrico Granata if (category_sp->IsEnabled() == false) 181*5548cb50SEnrico Granata continue; 182*5548cb50SEnrico Granata lldb::TypeSummaryImplSP summary_current_sp = category_sp->GetSummaryForType(type_sp); 183*5548cb50SEnrico Granata if (summary_current_sp && (summary_chosen_sp.get() == NULL || (prio_category > category_sp->GetEnabledPosition()))) 184*5548cb50SEnrico Granata { 185*5548cb50SEnrico Granata prio_category = category_sp->GetEnabledPosition(); 186*5548cb50SEnrico Granata summary_chosen_sp = summary_current_sp; 187*5548cb50SEnrico Granata } 188*5548cb50SEnrico Granata } 189*5548cb50SEnrico Granata return summary_chosen_sp; 190*5548cb50SEnrico Granata } 191*5548cb50SEnrico Granata 192*5548cb50SEnrico Granata lldb::TypeFilterImplSP 193*5548cb50SEnrico Granata FormatManager::GetFilterForType (lldb::TypeNameSpecifierImplSP type_sp) 194*5548cb50SEnrico Granata { 195*5548cb50SEnrico Granata if (!type_sp) 196*5548cb50SEnrico Granata return lldb::TypeFilterImplSP(); 197*5548cb50SEnrico Granata lldb::TypeFilterImplSP filter_chosen_sp; 198*5548cb50SEnrico Granata uint32_t num_categories = m_categories_map.GetCount(); 199*5548cb50SEnrico Granata lldb::TypeCategoryImplSP category_sp; 200*5548cb50SEnrico Granata uint32_t prio_category = UINT32_MAX; 201*5548cb50SEnrico Granata for (uint32_t category_id = 0; 202*5548cb50SEnrico Granata category_id < num_categories; 203*5548cb50SEnrico Granata category_id++) 204*5548cb50SEnrico Granata { 205*5548cb50SEnrico Granata category_sp = GetCategoryAtIndex(category_id); 206*5548cb50SEnrico Granata if (category_sp->IsEnabled() == false) 207*5548cb50SEnrico Granata continue; 208*5548cb50SEnrico Granata lldb::TypeFilterImplSP filter_current_sp((TypeFilterImpl*)category_sp->GetFilterForType(type_sp).get()); 209*5548cb50SEnrico Granata if (filter_current_sp && (filter_chosen_sp.get() == NULL || (prio_category > category_sp->GetEnabledPosition()))) 210*5548cb50SEnrico Granata { 211*5548cb50SEnrico Granata prio_category = category_sp->GetEnabledPosition(); 212*5548cb50SEnrico Granata filter_chosen_sp = filter_current_sp; 213*5548cb50SEnrico Granata } 214*5548cb50SEnrico Granata } 215*5548cb50SEnrico Granata return filter_chosen_sp; 216*5548cb50SEnrico Granata } 217*5548cb50SEnrico Granata 218*5548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON 219*5548cb50SEnrico Granata lldb::ScriptedSyntheticChildrenSP 220*5548cb50SEnrico Granata FormatManager::GetSyntheticForType (lldb::TypeNameSpecifierImplSP type_sp) 221*5548cb50SEnrico Granata { 222*5548cb50SEnrico Granata if (!type_sp) 223*5548cb50SEnrico Granata return lldb::ScriptedSyntheticChildrenSP(); 224*5548cb50SEnrico Granata lldb::ScriptedSyntheticChildrenSP synth_chosen_sp; 225*5548cb50SEnrico Granata uint32_t num_categories = m_categories_map.GetCount(); 226*5548cb50SEnrico Granata lldb::TypeCategoryImplSP category_sp; 227*5548cb50SEnrico Granata uint32_t prio_category = UINT32_MAX; 228*5548cb50SEnrico Granata for (uint32_t category_id = 0; 229*5548cb50SEnrico Granata category_id < num_categories; 230*5548cb50SEnrico Granata category_id++) 231*5548cb50SEnrico Granata { 232*5548cb50SEnrico Granata category_sp = GetCategoryAtIndex(category_id); 233*5548cb50SEnrico Granata if (category_sp->IsEnabled() == false) 234*5548cb50SEnrico Granata continue; 235*5548cb50SEnrico Granata lldb::ScriptedSyntheticChildrenSP synth_current_sp((ScriptedSyntheticChildren*)category_sp->GetSyntheticForType(type_sp).get()); 236*5548cb50SEnrico Granata if (synth_current_sp && (synth_chosen_sp.get() == NULL || (prio_category > category_sp->GetEnabledPosition()))) 237*5548cb50SEnrico Granata { 238*5548cb50SEnrico Granata prio_category = category_sp->GetEnabledPosition(); 239*5548cb50SEnrico Granata synth_chosen_sp = synth_current_sp; 240*5548cb50SEnrico Granata } 241*5548cb50SEnrico Granata } 242*5548cb50SEnrico Granata return synth_chosen_sp; 243*5548cb50SEnrico Granata } 244*5548cb50SEnrico Granata #endif 245*5548cb50SEnrico Granata 246*5548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON 247*5548cb50SEnrico Granata lldb::SyntheticChildrenSP 248*5548cb50SEnrico Granata FormatManager::GetSyntheticChildrenForType (lldb::TypeNameSpecifierImplSP type_sp) 249*5548cb50SEnrico Granata { 250*5548cb50SEnrico Granata if (!type_sp) 251*5548cb50SEnrico Granata return lldb::SyntheticChildrenSP(); 252*5548cb50SEnrico Granata lldb::TypeFilterImplSP filter_sp = GetFilterForType(type_sp); 253*5548cb50SEnrico Granata lldb::ScriptedSyntheticChildrenSP synth_sp = GetSyntheticForType(type_sp); 254*5548cb50SEnrico Granata if (filter_sp->GetRevision() > synth_sp->GetRevision()) 255*5548cb50SEnrico Granata return lldb::SyntheticChildrenSP(filter_sp.get()); 256*5548cb50SEnrico Granata else 257*5548cb50SEnrico Granata return lldb::SyntheticChildrenSP(synth_sp.get()); 258*5548cb50SEnrico Granata } 259*5548cb50SEnrico Granata #endif 260*5548cb50SEnrico Granata 261*5548cb50SEnrico Granata lldb::TypeCategoryImplSP 262*5548cb50SEnrico Granata FormatManager::GetCategory (const ConstString& category_name, 263*5548cb50SEnrico Granata bool can_create) 264*5548cb50SEnrico Granata { 265*5548cb50SEnrico Granata if (!category_name) 266*5548cb50SEnrico Granata return GetCategory(m_default_category_name); 267*5548cb50SEnrico Granata lldb::TypeCategoryImplSP category; 268*5548cb50SEnrico Granata if (m_categories_map.Get(category_name, category)) 269*5548cb50SEnrico Granata return category; 270*5548cb50SEnrico Granata 271*5548cb50SEnrico Granata if (!can_create) 272*5548cb50SEnrico Granata return lldb::TypeCategoryImplSP(); 273*5548cb50SEnrico Granata 274*5548cb50SEnrico Granata m_categories_map.Add(category_name,lldb::TypeCategoryImplSP(new TypeCategoryImpl(this, category_name))); 275*5548cb50SEnrico Granata return GetCategory(category_name); 276*5548cb50SEnrico Granata } 277*5548cb50SEnrico Granata 278*5548cb50SEnrico Granata lldb::Format 279*5548cb50SEnrico Granata FormatManager::GetSingleItemFormat(lldb::Format vector_format) 280*5548cb50SEnrico Granata { 281*5548cb50SEnrico Granata switch(vector_format) 282*5548cb50SEnrico Granata { 283*5548cb50SEnrico Granata case eFormatVectorOfChar: 284*5548cb50SEnrico Granata return eFormatCharArray; 285*5548cb50SEnrico Granata 286*5548cb50SEnrico Granata case eFormatVectorOfSInt8: 287*5548cb50SEnrico Granata case eFormatVectorOfSInt16: 288*5548cb50SEnrico Granata case eFormatVectorOfSInt32: 289*5548cb50SEnrico Granata case eFormatVectorOfSInt64: 290*5548cb50SEnrico Granata return eFormatDecimal; 291*5548cb50SEnrico Granata 292*5548cb50SEnrico Granata case eFormatVectorOfUInt8: 293*5548cb50SEnrico Granata case eFormatVectorOfUInt16: 294*5548cb50SEnrico Granata case eFormatVectorOfUInt32: 295*5548cb50SEnrico Granata case eFormatVectorOfUInt64: 296*5548cb50SEnrico Granata case eFormatVectorOfUInt128: 297*5548cb50SEnrico Granata return eFormatHex; 298*5548cb50SEnrico Granata 299*5548cb50SEnrico Granata case eFormatVectorOfFloat32: 300*5548cb50SEnrico Granata case eFormatVectorOfFloat64: 301*5548cb50SEnrico Granata return eFormatFloat; 302*5548cb50SEnrico Granata 303*5548cb50SEnrico Granata default: 304*5548cb50SEnrico Granata return lldb::eFormatInvalid; 305*5548cb50SEnrico Granata } 306*5548cb50SEnrico Granata } 307*5548cb50SEnrico Granata 308*5548cb50SEnrico Granata ConstString 309*5548cb50SEnrico Granata FormatManager::GetValidTypeName (const ConstString& type) 310*5548cb50SEnrico Granata { 311*5548cb50SEnrico Granata return ::GetValidTypeName_Impl(type); 312*5548cb50SEnrico Granata } 313*5548cb50SEnrico Granata 314*5548cb50SEnrico Granata ConstString 315*5548cb50SEnrico Granata GetTypeForCache (ValueObject& valobj, 316*5548cb50SEnrico Granata lldb::DynamicValueType use_dynamic) 317*5548cb50SEnrico Granata { 318*5548cb50SEnrico Granata if (use_dynamic == lldb::eNoDynamicValues) 319*5548cb50SEnrico Granata { 320*5548cb50SEnrico Granata if (valobj.IsDynamic()) 321*5548cb50SEnrico Granata { 322*5548cb50SEnrico Granata if (valobj.GetStaticValue()) 323*5548cb50SEnrico Granata return valobj.GetStaticValue()->GetQualifiedTypeName(); 324*5548cb50SEnrico Granata else 325*5548cb50SEnrico Granata return ConstString(); 326*5548cb50SEnrico Granata } 327*5548cb50SEnrico Granata else 328*5548cb50SEnrico Granata return valobj.GetQualifiedTypeName(); 329*5548cb50SEnrico Granata } 330*5548cb50SEnrico Granata if (valobj.IsDynamic()) 331*5548cb50SEnrico Granata return valobj.GetQualifiedTypeName(); 332*5548cb50SEnrico Granata if (valobj.GetDynamicValue(use_dynamic)) 333*5548cb50SEnrico Granata return valobj.GetDynamicValue(use_dynamic)->GetQualifiedTypeName(); 334*5548cb50SEnrico Granata return ConstString(); 335*5548cb50SEnrico Granata } 336*5548cb50SEnrico Granata 337*5548cb50SEnrico Granata #define USE_CACHE 1 338*5548cb50SEnrico Granata lldb::TypeSummaryImplSP 339*5548cb50SEnrico Granata FormatManager::GetSummaryFormat (ValueObject& valobj, 340*5548cb50SEnrico Granata lldb::DynamicValueType use_dynamic) 341*5548cb50SEnrico Granata { 342*5548cb50SEnrico Granata TypeSummaryImplSP retval; 343*5548cb50SEnrico Granata #if USE_CACHE 344*5548cb50SEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES)); 345*5548cb50SEnrico Granata ConstString valobj_type(GetTypeForCache(valobj, use_dynamic)); 346*5548cb50SEnrico Granata if (valobj_type) 347*5548cb50SEnrico Granata { 348*5548cb50SEnrico Granata if (log) 349*5548cb50SEnrico Granata log->Printf("[FormatManager::GetSummaryFormat] Looking into cache for type %s", valobj_type.AsCString("<invalid>")); 350*5548cb50SEnrico Granata if (m_format_cache.GetSummary(valobj_type,retval)) 351*5548cb50SEnrico Granata return retval; 352*5548cb50SEnrico Granata if (log) 353*5548cb50SEnrico Granata log->Printf("[FormatManager::GetSummaryFormat] Cache search failed. Going normal route"); 354*5548cb50SEnrico Granata } 355*5548cb50SEnrico Granata #endif 356*5548cb50SEnrico Granata retval = m_categories_map.GetSummaryFormat(valobj, use_dynamic); 357*5548cb50SEnrico Granata #if USE_CACHE 358*5548cb50SEnrico Granata if (valobj_type) 359*5548cb50SEnrico Granata { 360*5548cb50SEnrico Granata if (log) 361*5548cb50SEnrico Granata log->Printf("[FormatManager::GetSummaryFormat] Caching %p for type %s",retval.get(),valobj_type.AsCString("<invalid>")); 362*5548cb50SEnrico Granata m_format_cache.SetSummary(valobj_type,retval); 363*5548cb50SEnrico Granata } 364*5548cb50SEnrico Granata #ifdef LLDB_CONFIGURATION_DEBUG 365*5548cb50SEnrico Granata if (log) 366*5548cb50SEnrico Granata log->Printf("[FormatManager::GetSummaryFormat] Cache hits: %llu - Cache Misses: %llu", m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses()); 367*5548cb50SEnrico Granata #endif 368*5548cb50SEnrico Granata #endif 369*5548cb50SEnrico Granata return retval; 370*5548cb50SEnrico Granata } 371*5548cb50SEnrico Granata 372*5548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON 373*5548cb50SEnrico Granata lldb::SyntheticChildrenSP 374*5548cb50SEnrico Granata FormatManager::GetSyntheticChildren (ValueObject& valobj, 375*5548cb50SEnrico Granata lldb::DynamicValueType use_dynamic) 376*5548cb50SEnrico Granata { 377*5548cb50SEnrico Granata SyntheticChildrenSP retval; 378*5548cb50SEnrico Granata #if USE_CACHE 379*5548cb50SEnrico Granata LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES)); 380*5548cb50SEnrico Granata ConstString valobj_type(GetTypeForCache(valobj, use_dynamic)); 381*5548cb50SEnrico Granata if (valobj_type) 382*5548cb50SEnrico Granata { 383*5548cb50SEnrico Granata if (log) 384*5548cb50SEnrico Granata log->Printf("[FormatManager::GetSyntheticChildren] Looking into cache for type %s\n", valobj_type.AsCString("<invalid>")); 385*5548cb50SEnrico Granata if (m_format_cache.GetSynthetic(valobj_type,retval)) 386*5548cb50SEnrico Granata return retval; 387*5548cb50SEnrico Granata if (log) 388*5548cb50SEnrico Granata log->Printf("[FormatManager::GetSyntheticChildren] Cache search failed. Going normal route\n"); 389*5548cb50SEnrico Granata } 390*5548cb50SEnrico Granata #endif 391*5548cb50SEnrico Granata retval = m_categories_map.GetSyntheticChildren(valobj, use_dynamic); 392*5548cb50SEnrico Granata #if USE_CACHE 393*5548cb50SEnrico Granata if (valobj_type) 394*5548cb50SEnrico Granata { 395*5548cb50SEnrico Granata if (log) 396*5548cb50SEnrico Granata log->Printf("[FormatManager::GetSyntheticChildren] Caching %p for type %s\n",retval.get(),valobj_type.AsCString("<invalid>")); 397*5548cb50SEnrico Granata m_format_cache.SetSynthetic(valobj_type,retval); 398*5548cb50SEnrico Granata } 399*5548cb50SEnrico Granata #ifdef LLDB_CONFIGURATION_DEBUG 400*5548cb50SEnrico Granata if (log) 401*5548cb50SEnrico Granata log->Printf("[FormatManager::GetSyntheticChildren] Cache hits: %llu - Cache Misses: %llu", m_format_cache.GetCacheHits(), m_format_cache.GetCacheMisses()); 402*5548cb50SEnrico Granata #endif 403*5548cb50SEnrico Granata #endif 404*5548cb50SEnrico Granata return retval; 405*5548cb50SEnrico Granata } 406*5548cb50SEnrico Granata #endif 407*5548cb50SEnrico Granata #undef USE_CACHE 408*5548cb50SEnrico Granata 409*5548cb50SEnrico Granata FormatManager::FormatManager() : 410*5548cb50SEnrico Granata m_format_cache(), 411*5548cb50SEnrico Granata m_value_nav("format",this), 412*5548cb50SEnrico Granata m_named_summaries_map(this), 413*5548cb50SEnrico Granata m_last_revision(0), 414*5548cb50SEnrico Granata m_categories_map(this), 415*5548cb50SEnrico Granata m_default_category_name(ConstString("default")), 416*5548cb50SEnrico Granata m_system_category_name(ConstString("system")), 417*5548cb50SEnrico Granata m_gnu_cpp_category_name(ConstString("gnu-libstdc++")), 418*5548cb50SEnrico Granata m_libcxx_category_name(ConstString("libcxx")), 419*5548cb50SEnrico Granata m_objc_category_name(ConstString("objc")), 420*5548cb50SEnrico Granata m_corefoundation_category_name(ConstString("CoreFoundation")), 421*5548cb50SEnrico Granata m_coregraphics_category_name(ConstString("CoreGraphics")), 422*5548cb50SEnrico Granata m_coreservices_category_name(ConstString("CoreServices")), 423*5548cb50SEnrico Granata m_vectortypes_category_name(ConstString("VectorTypes")), 424*5548cb50SEnrico Granata m_appkit_category_name(ConstString("AppKit")) 425*5548cb50SEnrico Granata { 426*5548cb50SEnrico Granata LoadSystemFormatters(); 427*5548cb50SEnrico Granata LoadLibStdcppFormatters(); 428*5548cb50SEnrico Granata LoadLibcxxFormatters(); 429*5548cb50SEnrico Granata LoadObjCFormatters(); 430*5548cb50SEnrico Granata 431*5548cb50SEnrico Granata EnableCategory(m_objc_category_name,TypeCategoryMap::Last); 432*5548cb50SEnrico Granata EnableCategory(m_corefoundation_category_name,TypeCategoryMap::Last); 433*5548cb50SEnrico Granata EnableCategory(m_appkit_category_name,TypeCategoryMap::Last); 434*5548cb50SEnrico Granata EnableCategory(m_coreservices_category_name,TypeCategoryMap::Last); 435*5548cb50SEnrico Granata EnableCategory(m_coregraphics_category_name,TypeCategoryMap::Last); 436*5548cb50SEnrico Granata EnableCategory(m_gnu_cpp_category_name,TypeCategoryMap::Last); 437*5548cb50SEnrico Granata EnableCategory(m_libcxx_category_name,TypeCategoryMap::Last); 438*5548cb50SEnrico Granata EnableCategory(m_vectortypes_category_name,TypeCategoryMap::Last); 439*5548cb50SEnrico Granata EnableCategory(m_system_category_name,TypeCategoryMap::Last); 440*5548cb50SEnrico Granata } 441*5548cb50SEnrico Granata 442*5548cb50SEnrico Granata static void 443*5548cb50SEnrico Granata AddStringSummary(TypeCategoryImpl::SharedPointer category_sp, 444*5548cb50SEnrico Granata const char* string, 445*5548cb50SEnrico Granata ConstString type_name, 446*5548cb50SEnrico Granata TypeSummaryImpl::Flags flags) 447*5548cb50SEnrico Granata { 448*5548cb50SEnrico Granata lldb::TypeSummaryImplSP summary_sp(new StringSummaryFormat(flags, 449*5548cb50SEnrico Granata string)); 450*5548cb50SEnrico Granata category_sp->GetSummaryNavigator()->Add(type_name, 451*5548cb50SEnrico Granata summary_sp); 452*5548cb50SEnrico Granata } 453*5548cb50SEnrico Granata 454*5548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON 455*5548cb50SEnrico Granata static void 456*5548cb50SEnrico Granata AddScriptSummary(TypeCategoryImpl::SharedPointer category_sp, 457*5548cb50SEnrico Granata const char* funct_name, 458*5548cb50SEnrico Granata ConstString type_name, 459*5548cb50SEnrico Granata TypeSummaryImpl::Flags flags) 460*5548cb50SEnrico Granata { 461*5548cb50SEnrico Granata 462*5548cb50SEnrico Granata std::string code(" "); 463*5548cb50SEnrico Granata code.append(funct_name).append("(valobj,internal_dict)"); 464*5548cb50SEnrico Granata 465*5548cb50SEnrico Granata lldb::TypeSummaryImplSP summary_sp(new ScriptSummaryFormat(flags, 466*5548cb50SEnrico Granata funct_name, 467*5548cb50SEnrico Granata code.c_str())); 468*5548cb50SEnrico Granata category_sp->GetSummaryNavigator()->Add(type_name, 469*5548cb50SEnrico Granata summary_sp); 470*5548cb50SEnrico Granata } 471*5548cb50SEnrico Granata #endif 472*5548cb50SEnrico Granata 473*5548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON 474*5548cb50SEnrico Granata static void 475*5548cb50SEnrico Granata AddCXXSummary (TypeCategoryImpl::SharedPointer category_sp, 476*5548cb50SEnrico Granata CXXFunctionSummaryFormat::Callback funct, 477*5548cb50SEnrico Granata const char* description, 478*5548cb50SEnrico Granata ConstString type_name, 479*5548cb50SEnrico Granata TypeSummaryImpl::Flags flags) 480*5548cb50SEnrico Granata { 481*5548cb50SEnrico Granata lldb::TypeSummaryImplSP summary_sp(new CXXFunctionSummaryFormat(flags,funct,description)); 482*5548cb50SEnrico Granata category_sp->GetSummaryNavigator()->Add(type_name, 483*5548cb50SEnrico Granata summary_sp); 484*5548cb50SEnrico Granata } 485*5548cb50SEnrico Granata #endif 486*5548cb50SEnrico Granata 487*5548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON 488*5548cb50SEnrico Granata static void AddCXXSynthetic (TypeCategoryImpl::SharedPointer category_sp, 489*5548cb50SEnrico Granata CXXSyntheticChildren::CreateFrontEndCallback generator, 490*5548cb50SEnrico Granata const char* description, 491*5548cb50SEnrico Granata ConstString type_name, 492*5548cb50SEnrico Granata ScriptedSyntheticChildren::Flags flags) 493*5548cb50SEnrico Granata { 494*5548cb50SEnrico Granata lldb::SyntheticChildrenSP synth_sp(new CXXSyntheticChildren(flags,description,generator)); 495*5548cb50SEnrico Granata category_sp->GetSyntheticNavigator()->Add(type_name,synth_sp); 496*5548cb50SEnrico Granata } 497*5548cb50SEnrico Granata #endif 498*5548cb50SEnrico Granata 499*5548cb50SEnrico Granata void 500*5548cb50SEnrico Granata FormatManager::LoadLibStdcppFormatters() 501*5548cb50SEnrico Granata { 502*5548cb50SEnrico Granata TypeSummaryImpl::Flags stl_summary_flags; 503*5548cb50SEnrico Granata stl_summary_flags.SetCascades(true) 504*5548cb50SEnrico Granata .SetSkipPointers(false) 505*5548cb50SEnrico Granata .SetSkipReferences(false) 506*5548cb50SEnrico Granata .SetDontShowChildren(true) 507*5548cb50SEnrico Granata .SetDontShowValue(true) 508*5548cb50SEnrico Granata .SetShowMembersOneLiner(false) 509*5548cb50SEnrico Granata .SetHideItemNames(false); 510*5548cb50SEnrico Granata 511*5548cb50SEnrico Granata lldb::TypeSummaryImplSP std_string_summary_sp(new StringSummaryFormat(stl_summary_flags, 512*5548cb50SEnrico Granata "${var._M_dataplus._M_p}")); 513*5548cb50SEnrico Granata 514*5548cb50SEnrico Granata TypeCategoryImpl::SharedPointer gnu_category_sp = GetCategory(m_gnu_cpp_category_name); 515*5548cb50SEnrico Granata 516*5548cb50SEnrico Granata gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::string"), 517*5548cb50SEnrico Granata std_string_summary_sp); 518*5548cb50SEnrico Granata gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<char>"), 519*5548cb50SEnrico Granata std_string_summary_sp); 520*5548cb50SEnrico Granata gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<char,std::char_traits<char>,std::allocator<char> >"), 521*5548cb50SEnrico Granata std_string_summary_sp); 522*5548cb50SEnrico Granata gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<char, std::char_traits<char>, std::allocator<char> >"), 523*5548cb50SEnrico Granata std_string_summary_sp); 524*5548cb50SEnrico Granata 525*5548cb50SEnrico Granata // making sure we force-pick the summary for printing wstring (_M_p is a wchar_t*) 526*5548cb50SEnrico Granata lldb::TypeSummaryImplSP std_wstring_summary_sp(new StringSummaryFormat(stl_summary_flags, 527*5548cb50SEnrico Granata "${var._M_dataplus._M_p%S}")); 528*5548cb50SEnrico Granata 529*5548cb50SEnrico Granata gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::wstring"), 530*5548cb50SEnrico Granata std_wstring_summary_sp); 531*5548cb50SEnrico Granata gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<wchar_t>"), 532*5548cb50SEnrico Granata std_wstring_summary_sp); 533*5548cb50SEnrico Granata gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >"), 534*5548cb50SEnrico Granata std_wstring_summary_sp); 535*5548cb50SEnrico Granata gnu_category_sp->GetSummaryNavigator()->Add(ConstString("std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >"), 536*5548cb50SEnrico Granata std_wstring_summary_sp); 537*5548cb50SEnrico Granata 538*5548cb50SEnrico Granata 539*5548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON 540*5548cb50SEnrico Granata 541*5548cb50SEnrico Granata SyntheticChildren::Flags stl_synth_flags; 542*5548cb50SEnrico Granata stl_synth_flags.SetCascades(true).SetSkipPointers(false).SetSkipReferences(false); 543*5548cb50SEnrico Granata 544*5548cb50SEnrico Granata gnu_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::vector<.+>(( )?&)?$")), 545*5548cb50SEnrico Granata SyntheticChildrenSP(new ScriptedSyntheticChildren(stl_synth_flags, 546*5548cb50SEnrico Granata "lldb.formatters.cpp.gnu_libstdcpp.StdVectorSynthProvider"))); 547*5548cb50SEnrico Granata gnu_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::map<.+> >(( )?&)?$")), 548*5548cb50SEnrico Granata SyntheticChildrenSP(new ScriptedSyntheticChildren(stl_synth_flags, 549*5548cb50SEnrico Granata "lldb.formatters.cpp.gnu_libstdcpp.StdMapSynthProvider"))); 550*5548cb50SEnrico Granata gnu_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::list<.+>(( )?&)?$")), 551*5548cb50SEnrico Granata SyntheticChildrenSP(new ScriptedSyntheticChildren(stl_synth_flags, 552*5548cb50SEnrico Granata "lldb.formatters.cpp.gnu_libstdcpp.StdListSynthProvider"))); 553*5548cb50SEnrico Granata 554*5548cb50SEnrico Granata stl_summary_flags.SetDontShowChildren(false); 555*5548cb50SEnrico Granata gnu_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::vector<.+>(( )?&)?$")), 556*5548cb50SEnrico Granata TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, 557*5548cb50SEnrico Granata "size=${svar%#}"))); 558*5548cb50SEnrico Granata gnu_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::map<.+> >(( )?&)?$")), 559*5548cb50SEnrico Granata TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, 560*5548cb50SEnrico Granata "size=${svar%#}"))); 561*5548cb50SEnrico Granata gnu_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::list<.+>(( )?&)?$")), 562*5548cb50SEnrico Granata TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, 563*5548cb50SEnrico Granata "size=${svar%#}"))); 564*5548cb50SEnrico Granata #endif 565*5548cb50SEnrico Granata } 566*5548cb50SEnrico Granata 567*5548cb50SEnrico Granata void 568*5548cb50SEnrico Granata FormatManager::LoadLibcxxFormatters() 569*5548cb50SEnrico Granata { 570*5548cb50SEnrico Granata TypeSummaryImpl::Flags stl_summary_flags; 571*5548cb50SEnrico Granata stl_summary_flags.SetCascades(true) 572*5548cb50SEnrico Granata .SetSkipPointers(false) 573*5548cb50SEnrico Granata .SetSkipReferences(false) 574*5548cb50SEnrico Granata .SetDontShowChildren(true) 575*5548cb50SEnrico Granata .SetDontShowValue(true) 576*5548cb50SEnrico Granata .SetShowMembersOneLiner(false) 577*5548cb50SEnrico Granata .SetHideItemNames(false); 578*5548cb50SEnrico Granata 579*5548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON 580*5548cb50SEnrico Granata //std::string code(" lldb.formatters.cpp.libcxx.stdstring_SummaryProvider(valobj,internal_dict)"); 581*5548cb50SEnrico Granata //lldb::TypeSummaryImplSP std_string_summary_sp(new ScriptSummaryFormat(stl_summary_flags, "lldb.formatters.cpp.libcxx.stdstring_SummaryProvider",code.c_str())); 582*5548cb50SEnrico Granata 583*5548cb50SEnrico Granata lldb::TypeSummaryImplSP std_string_summary_sp(new CXXFunctionSummaryFormat(stl_summary_flags, lldb_private::formatters::LibcxxStringSummaryProvider, "std::string summary provider")); 584*5548cb50SEnrico Granata lldb::TypeSummaryImplSP std_wstring_summary_sp(new CXXFunctionSummaryFormat(stl_summary_flags, lldb_private::formatters::LibcxxWStringSummaryProvider, "std::wstring summary provider")); 585*5548cb50SEnrico Granata 586*5548cb50SEnrico Granata TypeCategoryImpl::SharedPointer libcxx_category_sp = GetCategory(m_libcxx_category_name); 587*5548cb50SEnrico Granata 588*5548cb50SEnrico Granata libcxx_category_sp->GetSummaryNavigator()->Add(ConstString("std::__1::string"), 589*5548cb50SEnrico Granata std_string_summary_sp); 590*5548cb50SEnrico Granata libcxx_category_sp->GetSummaryNavigator()->Add(ConstString("std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >"), 591*5548cb50SEnrico Granata std_string_summary_sp); 592*5548cb50SEnrico Granata 593*5548cb50SEnrico Granata libcxx_category_sp->GetSummaryNavigator()->Add(ConstString("std::__1::wstring"), 594*5548cb50SEnrico Granata std_wstring_summary_sp); 595*5548cb50SEnrico Granata libcxx_category_sp->GetSummaryNavigator()->Add(ConstString("std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >"), 596*5548cb50SEnrico Granata std_wstring_summary_sp); 597*5548cb50SEnrico Granata 598*5548cb50SEnrico Granata SyntheticChildren::Flags stl_synth_flags; 599*5548cb50SEnrico Granata stl_synth_flags.SetCascades(true).SetSkipPointers(false).SetSkipReferences(false); 600*5548cb50SEnrico Granata 601*5548cb50SEnrico Granata libcxx_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::vector<.+>(( )?&)?$")), 602*5548cb50SEnrico Granata SyntheticChildrenSP(new ScriptedSyntheticChildren(stl_synth_flags, 603*5548cb50SEnrico Granata "lldb.formatters.cpp.libcxx.stdvector_SynthProvider"))); 604*5548cb50SEnrico Granata libcxx_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::list<.+>(( )?&)?$")), 605*5548cb50SEnrico Granata SyntheticChildrenSP(new ScriptedSyntheticChildren(stl_synth_flags, 606*5548cb50SEnrico Granata "lldb.formatters.cpp.libcxx.stdlist_SynthProvider"))); 607*5548cb50SEnrico Granata libcxx_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::map<.+> >(( )?&)?$")), 608*5548cb50SEnrico Granata SyntheticChildrenSP(new ScriptedSyntheticChildren(stl_synth_flags, 609*5548cb50SEnrico Granata "lldb.formatters.cpp.libcxx.stdmap_SynthProvider"))); 610*5548cb50SEnrico Granata libcxx_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^(std::__1::)deque<.+>(( )?&)?$")), 611*5548cb50SEnrico Granata SyntheticChildrenSP(new ScriptedSyntheticChildren(stl_synth_flags, 612*5548cb50SEnrico Granata "lldb.formatters.cpp.libcxx.stddeque_SynthProvider"))); 613*5548cb50SEnrico Granata libcxx_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^(std::__1::)shared_ptr<.+>(( )?&)?$")), 614*5548cb50SEnrico Granata SyntheticChildrenSP(new ScriptedSyntheticChildren(stl_synth_flags, 615*5548cb50SEnrico Granata "lldb.formatters.cpp.libcxx.stdsharedptr_SynthProvider"))); 616*5548cb50SEnrico Granata libcxx_category_sp->GetRegexSyntheticNavigator()->Add(RegularExpressionSP(new RegularExpression("^(std::__1::)weak_ptr<.+>(( )?&)?$")), 617*5548cb50SEnrico Granata SyntheticChildrenSP(new ScriptedSyntheticChildren(stl_synth_flags, 618*5548cb50SEnrico Granata "lldb.formatters.cpp.libcxx.stdsharedptr_SynthProvider"))); 619*5548cb50SEnrico Granata 620*5548cb50SEnrico Granata stl_summary_flags.SetDontShowChildren(false);stl_summary_flags.SetSkipPointers(true); 621*5548cb50SEnrico Granata libcxx_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::vector<.+>(( )?&)?$")), 622*5548cb50SEnrico Granata TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "size=${svar%#}"))); 623*5548cb50SEnrico Granata libcxx_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::list<.+>(( )?&)?$")), 624*5548cb50SEnrico Granata TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "size=${svar%#}"))); 625*5548cb50SEnrico Granata libcxx_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::map<.+> >(( )?&)?$")), 626*5548cb50SEnrico Granata TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "size=${svar%#}"))); 627*5548cb50SEnrico Granata libcxx_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::deque<.+>(( )?&)?$")), 628*5548cb50SEnrico Granata TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "size=${svar%#}"))); 629*5548cb50SEnrico Granata libcxx_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::shared_ptr<.+>(( )?&)?$")), 630*5548cb50SEnrico Granata TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "{${var.__ptr_%S}} (strong=${var.count} weak=${var.weak_count})"))); 631*5548cb50SEnrico Granata libcxx_category_sp->GetRegexSummaryNavigator()->Add(RegularExpressionSP(new RegularExpression("^std::__1::weak_ptr<.+>(( )?&)?$")), 632*5548cb50SEnrico Granata TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "{${var.__ptr_%S}} (strong=${var.count} weak=${var.weak_count})"))); 633*5548cb50SEnrico Granata 634*5548cb50SEnrico Granata // this summary prevails on the regex std::vector<> because we do exact matches before regex ones 635*5548cb50SEnrico Granata libcxx_category_sp->GetSummaryNavigator()->Add(ConstString("std::__1::vector<std::__1::allocator<bool> >"), 636*5548cb50SEnrico Granata TypeSummaryImplSP(new StringSummaryFormat(stl_summary_flags, "size=${var.__size_}"))); 637*5548cb50SEnrico Granata 638*5548cb50SEnrico Granata #endif 639*5548cb50SEnrico Granata } 640*5548cb50SEnrico Granata 641*5548cb50SEnrico Granata void 642*5548cb50SEnrico Granata FormatManager::LoadSystemFormatters() 643*5548cb50SEnrico Granata { 644*5548cb50SEnrico Granata 645*5548cb50SEnrico Granata TypeSummaryImpl::Flags string_flags; 646*5548cb50SEnrico Granata string_flags.SetCascades(false) 647*5548cb50SEnrico Granata .SetSkipPointers(true) 648*5548cb50SEnrico Granata .SetSkipReferences(false) 649*5548cb50SEnrico Granata .SetDontShowChildren(true) 650*5548cb50SEnrico Granata .SetDontShowValue(false) 651*5548cb50SEnrico Granata .SetShowMembersOneLiner(false) 652*5548cb50SEnrico Granata .SetHideItemNames(false); 653*5548cb50SEnrico Granata 654*5548cb50SEnrico Granata lldb::TypeSummaryImplSP string_format(new StringSummaryFormat(string_flags, "${var%s}")); 655*5548cb50SEnrico Granata 656*5548cb50SEnrico Granata 657*5548cb50SEnrico Granata lldb::TypeSummaryImplSP string_array_format(new StringSummaryFormat(TypeSummaryImpl::Flags().SetCascades(false) 658*5548cb50SEnrico Granata .SetSkipPointers(true) 659*5548cb50SEnrico Granata .SetSkipReferences(false) 660*5548cb50SEnrico Granata .SetDontShowChildren(false) 661*5548cb50SEnrico Granata .SetDontShowValue(true) 662*5548cb50SEnrico Granata .SetShowMembersOneLiner(false) 663*5548cb50SEnrico Granata .SetHideItemNames(false), 664*5548cb50SEnrico Granata "${var%s}")); 665*5548cb50SEnrico Granata 666*5548cb50SEnrico Granata lldb::RegularExpressionSP any_size_char_arr(new RegularExpression("char \\[[0-9]+\\]")); 667*5548cb50SEnrico Granata 668*5548cb50SEnrico Granata TypeCategoryImpl::SharedPointer sys_category_sp = GetCategory(m_system_category_name); 669*5548cb50SEnrico Granata 670*5548cb50SEnrico Granata sys_category_sp->GetSummaryNavigator()->Add(ConstString("char *"), string_format); 671*5548cb50SEnrico Granata sys_category_sp->GetSummaryNavigator()->Add(ConstString("const char *"), string_format); 672*5548cb50SEnrico Granata sys_category_sp->GetRegexSummaryNavigator()->Add(any_size_char_arr, string_array_format); 673*5548cb50SEnrico Granata 674*5548cb50SEnrico Granata lldb::TypeSummaryImplSP ostype_summary(new StringSummaryFormat(TypeSummaryImpl::Flags().SetCascades(false) 675*5548cb50SEnrico Granata .SetSkipPointers(true) 676*5548cb50SEnrico Granata .SetSkipReferences(true) 677*5548cb50SEnrico Granata .SetDontShowChildren(true) 678*5548cb50SEnrico Granata .SetDontShowValue(false) 679*5548cb50SEnrico Granata .SetShowMembersOneLiner(false) 680*5548cb50SEnrico Granata .SetHideItemNames(false), 681*5548cb50SEnrico Granata "${var%O}")); 682*5548cb50SEnrico Granata 683*5548cb50SEnrico Granata sys_category_sp->GetSummaryNavigator()->Add(ConstString("OSType"), ostype_summary); 684*5548cb50SEnrico Granata 685*5548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON 686*5548cb50SEnrico Granata // FIXME because of a bug in the FormatNavigator we need to add a summary for both X* and const X* (<rdar://problem/12717717>) 687*5548cb50SEnrico Granata AddCXXSummary(sys_category_sp, lldb_private::formatters::Char16StringSummaryProvider, "char16_t * summary provider", ConstString("char16_t *"), string_flags); 688*5548cb50SEnrico Granata AddCXXSummary(sys_category_sp, lldb_private::formatters::Char16StringSummaryProvider, "char16_t * summary provider", ConstString("const char16_t *"), string_flags); 689*5548cb50SEnrico Granata 690*5548cb50SEnrico Granata AddCXXSummary(sys_category_sp, lldb_private::formatters::Char32StringSummaryProvider, "char32_t * summary provider", ConstString("char32_t *"), string_flags); 691*5548cb50SEnrico Granata AddCXXSummary(sys_category_sp, lldb_private::formatters::Char32StringSummaryProvider, "char32_t * summary provider", ConstString("const char32_t *"), string_flags); 692*5548cb50SEnrico Granata 693*5548cb50SEnrico Granata AddCXXSummary(sys_category_sp, lldb_private::formatters::WCharStringSummaryProvider, "wchar_t * summary provider", ConstString("wchar_t *"), string_flags); 694*5548cb50SEnrico Granata AddCXXSummary(sys_category_sp, lldb_private::formatters::WCharStringSummaryProvider, "wchar_t * summary provider", ConstString("const wchar_t *"), string_flags); 695*5548cb50SEnrico Granata 696*5548cb50SEnrico Granata AddCXXSummary(sys_category_sp, lldb_private::formatters::Char16StringSummaryProvider, "unichar * summary provider", ConstString("unichar *"), string_flags); 697*5548cb50SEnrico Granata AddCXXSummary(sys_category_sp, lldb_private::formatters::Char16StringSummaryProvider, "unichar * summary provider", ConstString("const unichar *"), string_flags); 698*5548cb50SEnrico Granata 699*5548cb50SEnrico Granata TypeSummaryImpl::Flags widechar_flags; 700*5548cb50SEnrico Granata widechar_flags.SetDontShowValue(true) 701*5548cb50SEnrico Granata .SetSkipPointers(true) 702*5548cb50SEnrico Granata .SetSkipReferences(false) 703*5548cb50SEnrico Granata .SetCascades(true) 704*5548cb50SEnrico Granata .SetDontShowChildren(true) 705*5548cb50SEnrico Granata .SetHideItemNames(true) 706*5548cb50SEnrico Granata .SetShowMembersOneLiner(false); 707*5548cb50SEnrico Granata 708*5548cb50SEnrico Granata AddCXXSummary(sys_category_sp, lldb_private::formatters::Char16SummaryProvider, "char16_t summary provider", ConstString("char16_t"), widechar_flags); 709*5548cb50SEnrico Granata AddCXXSummary(sys_category_sp, lldb_private::formatters::Char32SummaryProvider, "char32_t summary provider", ConstString("char32_t"), widechar_flags); 710*5548cb50SEnrico Granata AddCXXSummary(sys_category_sp, lldb_private::formatters::WCharSummaryProvider, "wchar_t summary provider", ConstString("wchar_t"), widechar_flags); 711*5548cb50SEnrico Granata 712*5548cb50SEnrico Granata AddCXXSummary(sys_category_sp, lldb_private::formatters::Char16SummaryProvider, "unichar summary provider", ConstString("unichar"), widechar_flags); 713*5548cb50SEnrico Granata 714*5548cb50SEnrico Granata #endif 715*5548cb50SEnrico Granata } 716*5548cb50SEnrico Granata 717*5548cb50SEnrico Granata void 718*5548cb50SEnrico Granata FormatManager::LoadObjCFormatters() 719*5548cb50SEnrico Granata { 720*5548cb50SEnrico Granata TypeSummaryImpl::Flags objc_flags; 721*5548cb50SEnrico Granata objc_flags.SetCascades(false) 722*5548cb50SEnrico Granata .SetSkipPointers(true) 723*5548cb50SEnrico Granata .SetSkipReferences(true) 724*5548cb50SEnrico Granata .SetDontShowChildren(true) 725*5548cb50SEnrico Granata .SetDontShowValue(true) 726*5548cb50SEnrico Granata .SetShowMembersOneLiner(false) 727*5548cb50SEnrico Granata .SetHideItemNames(false); 728*5548cb50SEnrico Granata 729*5548cb50SEnrico Granata TypeCategoryImpl::SharedPointer objc_category_sp = GetCategory(m_objc_category_name); 730*5548cb50SEnrico Granata 731*5548cb50SEnrico Granata lldb::TypeSummaryImplSP ObjC_BOOL_summary(new CXXFunctionSummaryFormat(objc_flags, lldb_private::formatters::ObjCBOOLSummaryProvider,"")); 732*5548cb50SEnrico Granata objc_category_sp->GetSummaryNavigator()->Add(ConstString("BOOL"), 733*5548cb50SEnrico Granata ObjC_BOOL_summary); 734*5548cb50SEnrico Granata objc_category_sp->GetSummaryNavigator()->Add(ConstString("BOOL &"), 735*5548cb50SEnrico Granata ObjC_BOOL_summary); 736*5548cb50SEnrico Granata objc_category_sp->GetSummaryNavigator()->Add(ConstString("BOOL *"), 737*5548cb50SEnrico Granata ObjC_BOOL_summary); 738*5548cb50SEnrico Granata 739*5548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON 740*5548cb50SEnrico Granata // we need to skip pointers here since we are special casing a SEL* when retrieving its value 741*5548cb50SEnrico Granata objc_flags.SetSkipPointers(true); 742*5548cb50SEnrico Granata AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<false>, "SEL summary provider", ConstString("SEL"), objc_flags); 743*5548cb50SEnrico Granata AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<false>, "SEL summary provider", ConstString("struct objc_selector"), objc_flags); 744*5548cb50SEnrico Granata AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<false>, "SEL summary provider", ConstString("objc_selector"), objc_flags); 745*5548cb50SEnrico Granata AddCXXSummary(objc_category_sp, lldb_private::formatters::ObjCSELSummaryProvider<true>, "SEL summary provider", ConstString("objc_selector *"), objc_flags); 746*5548cb50SEnrico Granata 747*5548cb50SEnrico Granata AddScriptSummary(objc_category_sp, "lldb.formatters.objc.Class.Class_Summary", ConstString("Class"), objc_flags); 748*5548cb50SEnrico Granata #endif // LLDB_DISABLE_PYTHON 749*5548cb50SEnrico Granata 750*5548cb50SEnrico Granata objc_flags.SetSkipPointers(false); 751*5548cb50SEnrico Granata 752*5548cb50SEnrico Granata TypeCategoryImpl::SharedPointer corefoundation_category_sp = GetCategory(m_corefoundation_category_name); 753*5548cb50SEnrico Granata 754*5548cb50SEnrico Granata AddStringSummary(corefoundation_category_sp, 755*5548cb50SEnrico Granata "${var.years} years, ${var.months} months, ${var.days} days, ${var.hours} hours, ${var.minutes} minutes ${var.seconds} seconds", 756*5548cb50SEnrico Granata ConstString("CFGregorianUnits"), 757*5548cb50SEnrico Granata objc_flags); 758*5548cb50SEnrico Granata AddStringSummary(corefoundation_category_sp, 759*5548cb50SEnrico Granata "location=${var.location} length=${var.length}", 760*5548cb50SEnrico Granata ConstString("CFRange"), 761*5548cb50SEnrico Granata objc_flags); 762*5548cb50SEnrico Granata AddStringSummary(corefoundation_category_sp, 763*5548cb50SEnrico Granata "(x=${var.x}, y=${var.y})", 764*5548cb50SEnrico Granata ConstString("NSPoint"), 765*5548cb50SEnrico Granata objc_flags); 766*5548cb50SEnrico Granata AddStringSummary(corefoundation_category_sp, 767*5548cb50SEnrico Granata "location=${var.location}, length=${var.length}", 768*5548cb50SEnrico Granata ConstString("NSRange"), 769*5548cb50SEnrico Granata objc_flags); 770*5548cb50SEnrico Granata AddStringSummary(corefoundation_category_sp, 771*5548cb50SEnrico Granata "${var.origin}, ${var.size}", 772*5548cb50SEnrico Granata ConstString("NSRect"), 773*5548cb50SEnrico Granata objc_flags); 774*5548cb50SEnrico Granata AddStringSummary(corefoundation_category_sp, 775*5548cb50SEnrico Granata "(${var.origin}, ${var.size}), ...", 776*5548cb50SEnrico Granata ConstString("NSRectArray"), 777*5548cb50SEnrico Granata objc_flags); 778*5548cb50SEnrico Granata AddStringSummary(objc_category_sp, 779*5548cb50SEnrico Granata "(width=${var.width}, height=${var.height})", 780*5548cb50SEnrico Granata ConstString("NSSize"), 781*5548cb50SEnrico Granata objc_flags); 782*5548cb50SEnrico Granata 783*5548cb50SEnrico Granata TypeCategoryImpl::SharedPointer coregraphics_category_sp = GetCategory(m_coregraphics_category_name); 784*5548cb50SEnrico Granata 785*5548cb50SEnrico Granata AddStringSummary(coregraphics_category_sp, 786*5548cb50SEnrico Granata "(width=${var.width}, height=${var.height})", 787*5548cb50SEnrico Granata ConstString("CGSize"), 788*5548cb50SEnrico Granata objc_flags); 789*5548cb50SEnrico Granata AddStringSummary(coregraphics_category_sp, 790*5548cb50SEnrico Granata "(x=${var.x}, y=${var.y})", 791*5548cb50SEnrico Granata ConstString("CGPoint"), 792*5548cb50SEnrico Granata objc_flags); 793*5548cb50SEnrico Granata AddStringSummary(coregraphics_category_sp, 794*5548cb50SEnrico Granata "origin=${var.origin} size=${var.size}", 795*5548cb50SEnrico Granata ConstString("CGRect"), 796*5548cb50SEnrico Granata objc_flags); 797*5548cb50SEnrico Granata 798*5548cb50SEnrico Granata TypeCategoryImpl::SharedPointer coreservices_category_sp = GetCategory(m_coreservices_category_name); 799*5548cb50SEnrico Granata 800*5548cb50SEnrico Granata AddStringSummary(coreservices_category_sp, 801*5548cb50SEnrico Granata "red=${var.red} green=${var.green} blue=${var.blue}", 802*5548cb50SEnrico Granata ConstString("RGBColor"), 803*5548cb50SEnrico Granata objc_flags); 804*5548cb50SEnrico Granata AddStringSummary(coreservices_category_sp, 805*5548cb50SEnrico Granata "(t=${var.top}, l=${var.left}, b=${var.bottom}, r=${var.right})", 806*5548cb50SEnrico Granata ConstString("Rect"), 807*5548cb50SEnrico Granata objc_flags); 808*5548cb50SEnrico Granata AddStringSummary(coreservices_category_sp, 809*5548cb50SEnrico Granata "(v=${var.v}, h=${var.h})", 810*5548cb50SEnrico Granata ConstString("Point"), 811*5548cb50SEnrico Granata objc_flags); 812*5548cb50SEnrico Granata AddStringSummary(coreservices_category_sp, 813*5548cb50SEnrico Granata "${var.month}/${var.day}/${var.year} ${var.hour} :${var.minute} :${var.second} dayOfWeek:${var.dayOfWeek}", 814*5548cb50SEnrico Granata ConstString("DateTimeRect *"), 815*5548cb50SEnrico Granata objc_flags); 816*5548cb50SEnrico Granata AddStringSummary(coreservices_category_sp, 817*5548cb50SEnrico Granata "${var.ld.month}/${var.ld.day}/${var.ld.year} ${var.ld.hour} :${var.ld.minute} :${var.ld.second} dayOfWeek:${var.ld.dayOfWeek}", 818*5548cb50SEnrico Granata ConstString("LongDateRect"), 819*5548cb50SEnrico Granata objc_flags); 820*5548cb50SEnrico Granata AddStringSummary(coreservices_category_sp, 821*5548cb50SEnrico Granata "(x=${var.x}, y=${var.y})", 822*5548cb50SEnrico Granata ConstString("HIPoint"), 823*5548cb50SEnrico Granata objc_flags); 824*5548cb50SEnrico Granata AddStringSummary(coreservices_category_sp, 825*5548cb50SEnrico Granata "origin=${var.origin} size=${var.size}", 826*5548cb50SEnrico Granata ConstString("HIRect"), 827*5548cb50SEnrico Granata objc_flags); 828*5548cb50SEnrico Granata 829*5548cb50SEnrico Granata TypeCategoryImpl::SharedPointer appkit_category_sp = GetCategory(m_appkit_category_name); 830*5548cb50SEnrico Granata 831*5548cb50SEnrico Granata TypeSummaryImpl::Flags appkit_flags; 832*5548cb50SEnrico Granata appkit_flags.SetCascades(true) 833*5548cb50SEnrico Granata .SetSkipPointers(false) 834*5548cb50SEnrico Granata .SetSkipReferences(false) 835*5548cb50SEnrico Granata .SetDontShowChildren(true) 836*5548cb50SEnrico Granata .SetDontShowValue(false) 837*5548cb50SEnrico Granata .SetShowMembersOneLiner(false) 838*5548cb50SEnrico Granata .SetHideItemNames(false); 839*5548cb50SEnrico Granata 840*5548cb50SEnrico Granata appkit_flags.SetDontShowChildren(false); 841*5548cb50SEnrico Granata 842*5548cb50SEnrico Granata 843*5548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON 844*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("NSArray"), appkit_flags); 845*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("NSMutableArray"), appkit_flags); 846*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("__NSArrayI"), appkit_flags); 847*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("__NSArrayM"), appkit_flags); 848*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("__NSCFArray"), appkit_flags); 849*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("CFArrayRef"), appkit_flags); 850*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSArraySummaryProvider, "NSArray summary provider", ConstString("CFMutableArrayRef"), appkit_flags); 851*5548cb50SEnrico Granata 852*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("NSDictionary"), appkit_flags); 853*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("NSMutableDictionary"), appkit_flags); 854*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("__NSCFDictionary"), appkit_flags); 855*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("__NSDictionaryI"), appkit_flags); 856*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<false>, "NSDictionary summary provider", ConstString("__NSDictionaryM"), appkit_flags); 857*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<true>, "NSDictionary summary provider", ConstString("CFDictionaryRef"), appkit_flags); 858*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDictionarySummaryProvider<true>, "NSDictionary summary provider", ConstString("CFMutableDictionaryRef"), appkit_flags); 859*5548cb50SEnrico Granata 860*5548cb50SEnrico Granata // AddSummary(appkit_category_sp, "${var.key%@} -> ${var.value%@}", ConstString("$_lldb_typegen_nspair"), appkit_flags); 861*5548cb50SEnrico Granata 862*5548cb50SEnrico Granata appkit_flags.SetDontShowChildren(true); 863*5548cb50SEnrico Granata 864*5548cb50SEnrico Granata AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("__NSArrayM"), ScriptedSyntheticChildren::Flags()); 865*5548cb50SEnrico Granata AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("__NSArrayI"), ScriptedSyntheticChildren::Flags()); 866*5548cb50SEnrico Granata AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("NSArray"), ScriptedSyntheticChildren::Flags()); 867*5548cb50SEnrico Granata AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("NSMutableArray"), ScriptedSyntheticChildren::Flags()); 868*5548cb50SEnrico Granata AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSArraySyntheticFrontEndCreator, "NSArray synthetic children", ConstString("__NSCFArray"), ScriptedSyntheticChildren::Flags()); 869*5548cb50SEnrico Granata 870*5548cb50SEnrico Granata AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("__NSDictionaryM"), ScriptedSyntheticChildren::Flags()); 871*5548cb50SEnrico Granata AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("__NSDictionaryI"), ScriptedSyntheticChildren::Flags()); 872*5548cb50SEnrico Granata AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("NSDictionary"), ScriptedSyntheticChildren::Flags()); 873*5548cb50SEnrico Granata AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("NSMutableDictionary"), ScriptedSyntheticChildren::Flags()); 874*5548cb50SEnrico Granata AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("CFDictionaryRef"), ScriptedSyntheticChildren::Flags()); 875*5548cb50SEnrico Granata AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("CFMutableDictionaryRef"), ScriptedSyntheticChildren::Flags()); 876*5548cb50SEnrico Granata 877*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBag.CFBag_SummaryProvider", ConstString("CFBagRef"), appkit_flags); 878*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBag.CFBag_SummaryProvider", ConstString("__CFBag"), appkit_flags); 879*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBag.CFBag_SummaryProvider", ConstString("const struct __CFBag"), appkit_flags); 880*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBag.CFBag_SummaryProvider", ConstString("CFMutableBagRef"), appkit_flags); 881*5548cb50SEnrico Granata 882*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBinaryHeap.CFBinaryHeap_SummaryProvider", ConstString("CFBinaryHeapRef"), appkit_flags); 883*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBinaryHeap.CFBinaryHeap_SummaryProvider", ConstString("__CFBinaryHeap"), appkit_flags); 884*5548cb50SEnrico Granata 885*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSString"), appkit_flags); 886*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("CFStringRef"), appkit_flags); 887*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("CFMutableStringRef"), appkit_flags); 888*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("__NSCFConstantString"), appkit_flags); 889*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("__NSCFString"), appkit_flags); 890*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSCFConstantString"), appkit_flags); 891*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSCFString"), appkit_flags); 892*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSStringSummaryProvider, "NSString summary provider", ConstString("NSPathStore2"), appkit_flags); 893*5548cb50SEnrico Granata 894*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFString.CFAttributedString_SummaryProvider", ConstString("NSAttributedString"), appkit_flags); 895*5548cb50SEnrico Granata 896*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSBundle.NSBundle_SummaryProvider", ConstString("NSBundle"), appkit_flags); 897*5548cb50SEnrico Granata 898*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("NSData"), appkit_flags); 899*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("NSConcreteData"), appkit_flags); 900*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("NSConcreteMutableData"), appkit_flags); 901*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("__NSCFData"), appkit_flags); 902*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<true>, "NSData summary provider", ConstString("CFDataRef"), appkit_flags); 903*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<true>, "NSData summary provider", ConstString("CFMutableDataRef"), appkit_flags); 904*5548cb50SEnrico Granata 905*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSMachPort.NSMachPort_SummaryProvider", ConstString("NSMachPort"), appkit_flags); 906*5548cb50SEnrico Granata 907*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSNotification.NSNotification_SummaryProvider", ConstString("NSNotification"), appkit_flags); 908*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSNotification.NSNotification_SummaryProvider", ConstString("NSConcreteNotification"), appkit_flags); 909*5548cb50SEnrico Granata 910*5548cb50SEnrico Granata AddStringSummary(appkit_category_sp, "domain: ${var._domain} - code: ${var._code}", ConstString("NSError"), appkit_flags); 911*5548cb50SEnrico Granata AddStringSummary(appkit_category_sp,"name:${var.name%S} reason:${var.reason%S}",ConstString("NSException"),appkit_flags); 912*5548cb50SEnrico Granata 913*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("NSNumber"), appkit_flags); 914*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("__NSCFBoolean"), appkit_flags); 915*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("__NSCFNumber"), appkit_flags); 916*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("NSCFBoolean"), appkit_flags); 917*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSNumberSummaryProvider, "NSNumber summary provider", ConstString("NSCFNumber"), appkit_flags); 918*5548cb50SEnrico Granata 919*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::RuntimeSpecificDescriptionSummaryProvider, "NSDecimalNumber summary provider", ConstString("NSDecimalNumber"), appkit_flags); 920*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::RuntimeSpecificDescriptionSummaryProvider, "NSHost summary provider", ConstString("NSHost"), appkit_flags); 921*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::RuntimeSpecificDescriptionSummaryProvider, "NSTask summary provider", ConstString("NSTask"), appkit_flags); 922*5548cb50SEnrico Granata AddCXXSummary(appkit_category_sp, lldb_private::formatters::RuntimeSpecificDescriptionSummaryProvider, "NSValue summary provider", ConstString("NSValue"), appkit_flags); 923*5548cb50SEnrico Granata 924*5548cb50SEnrico Granata 925*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSSet.NSSet_SummaryProvider", ConstString("NSSet"), appkit_flags); 926*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSSet.NSSet_SummaryProvider2", ConstString("CFSetRef"), appkit_flags); 927*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSSet.NSSet_SummaryProvider2", ConstString("CFMutableSetRef"), appkit_flags); 928*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSSet.NSSet_SummaryProvider", ConstString("__NSCFSet"), appkit_flags); 929*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSSet.NSSet_SummaryProvider", ConstString("__NSSetI"), appkit_flags); 930*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSSet.NSSet_SummaryProvider", ConstString("__NSSetM"), appkit_flags); 931*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSSet.NSSet_SummaryProvider", ConstString("NSCountedSet"), appkit_flags); 932*5548cb50SEnrico Granata 933*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSURL.NSURL_SummaryProvider", ConstString("NSURL"), appkit_flags); 934*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSURL.NSURL_SummaryProvider", ConstString("CFURLRef"), appkit_flags); 935*5548cb50SEnrico Granata 936*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSDate.NSDate_SummaryProvider", ConstString("NSDate"), appkit_flags); 937*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSDate.NSDate_SummaryProvider", ConstString("__NSDate"), appkit_flags); 938*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSDate.NSDate_SummaryProvider", ConstString("__NSTaggedDate"), appkit_flags); 939*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSDate.NSDate_SummaryProvider", ConstString("NSCalendarDate"), appkit_flags); 940*5548cb50SEnrico Granata 941*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSDate.NSTimeZone_SummaryProvider", ConstString("NSTimeZone"), appkit_flags); 942*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSDate.NSTimeZone_SummaryProvider", ConstString("CFTimeZoneRef"), appkit_flags); 943*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSDate.NSTimeZone_SummaryProvider", ConstString("__NSTimeZone"), appkit_flags); 944*5548cb50SEnrico Granata 945*5548cb50SEnrico Granata // CFAbsoluteTime is actually a double rather than a pointer to an object 946*5548cb50SEnrico Granata // we do not care about the numeric value, since it is probably meaningless to users 947*5548cb50SEnrico Granata appkit_flags.SetDontShowValue(true); 948*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSDate.CFAbsoluteTime_SummaryProvider", ConstString("CFAbsoluteTime"), appkit_flags); 949*5548cb50SEnrico Granata appkit_flags.SetDontShowValue(false); 950*5548cb50SEnrico Granata 951*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSIndexSet.NSIndexSet_SummaryProvider", ConstString("NSIndexSet"), appkit_flags); 952*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.NSIndexSet.NSIndexSet_SummaryProvider", ConstString("NSMutableIndexSet"), appkit_flags); 953*5548cb50SEnrico Granata 954*5548cb50SEnrico Granata AddStringSummary(appkit_category_sp, 955*5548cb50SEnrico Granata "@\"${var.month%d}/${var.day%d}/${var.year%d} ${var.hour%d}:${var.minute%d}:${var.second}\"", 956*5548cb50SEnrico Granata ConstString("CFGregorianDate"), 957*5548cb50SEnrico Granata appkit_flags); 958*5548cb50SEnrico Granata 959*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBitVector.CFBitVector_SummaryProvider", ConstString("CFBitVectorRef"), appkit_flags); 960*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBitVector.CFBitVector_SummaryProvider", ConstString("CFMutableBitVectorRef"), appkit_flags); 961*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBitVector.CFBitVector_SummaryProvider", ConstString("__CFBitVector"), appkit_flags); 962*5548cb50SEnrico Granata AddScriptSummary(appkit_category_sp, "lldb.formatters.objc.CFBitVector.CFBitVector_SummaryProvider", ConstString("__CFMutableBitVector"), appkit_flags); 963*5548cb50SEnrico Granata #endif // LLDB_DISABLE_PYTHON 964*5548cb50SEnrico Granata 965*5548cb50SEnrico Granata TypeCategoryImpl::SharedPointer vectors_category_sp = GetCategory(m_vectortypes_category_name); 966*5548cb50SEnrico Granata 967*5548cb50SEnrico Granata TypeSummaryImpl::Flags vector_flags; 968*5548cb50SEnrico Granata vector_flags.SetCascades(true) 969*5548cb50SEnrico Granata .SetSkipPointers(true) 970*5548cb50SEnrico Granata .SetSkipReferences(false) 971*5548cb50SEnrico Granata .SetDontShowChildren(true) 972*5548cb50SEnrico Granata .SetDontShowValue(false) 973*5548cb50SEnrico Granata .SetShowMembersOneLiner(true) 974*5548cb50SEnrico Granata .SetHideItemNames(true); 975*5548cb50SEnrico Granata 976*5548cb50SEnrico Granata AddStringSummary(vectors_category_sp, 977*5548cb50SEnrico Granata "${var.uint128}", 978*5548cb50SEnrico Granata ConstString("builtin_type_vec128"), 979*5548cb50SEnrico Granata objc_flags); 980*5548cb50SEnrico Granata 981*5548cb50SEnrico Granata AddStringSummary(vectors_category_sp, 982*5548cb50SEnrico Granata "", 983*5548cb50SEnrico Granata ConstString("float [4]"), 984*5548cb50SEnrico Granata vector_flags); 985*5548cb50SEnrico Granata AddStringSummary(vectors_category_sp, 986*5548cb50SEnrico Granata "", 987*5548cb50SEnrico Granata ConstString("int32_t [4]"), 988*5548cb50SEnrico Granata vector_flags); 989*5548cb50SEnrico Granata AddStringSummary(vectors_category_sp, 990*5548cb50SEnrico Granata "", 991*5548cb50SEnrico Granata ConstString("int16_t [8]"), 992*5548cb50SEnrico Granata vector_flags); 993*5548cb50SEnrico Granata AddStringSummary(vectors_category_sp, 994*5548cb50SEnrico Granata "", 995*5548cb50SEnrico Granata ConstString("vDouble"), 996*5548cb50SEnrico Granata vector_flags); 997*5548cb50SEnrico Granata AddStringSummary(vectors_category_sp, 998*5548cb50SEnrico Granata "", 999*5548cb50SEnrico Granata ConstString("vFloat"), 1000*5548cb50SEnrico Granata vector_flags); 1001*5548cb50SEnrico Granata AddStringSummary(vectors_category_sp, 1002*5548cb50SEnrico Granata "", 1003*5548cb50SEnrico Granata ConstString("vSInt8"), 1004*5548cb50SEnrico Granata vector_flags); 1005*5548cb50SEnrico Granata AddStringSummary(vectors_category_sp, 1006*5548cb50SEnrico Granata "", 1007*5548cb50SEnrico Granata ConstString("vSInt16"), 1008*5548cb50SEnrico Granata vector_flags); 1009*5548cb50SEnrico Granata AddStringSummary(vectors_category_sp, 1010*5548cb50SEnrico Granata "", 1011*5548cb50SEnrico Granata ConstString("vSInt32"), 1012*5548cb50SEnrico Granata vector_flags); 1013*5548cb50SEnrico Granata AddStringSummary(vectors_category_sp, 1014*5548cb50SEnrico Granata "", 1015*5548cb50SEnrico Granata ConstString("vUInt16"), 1016*5548cb50SEnrico Granata vector_flags); 1017*5548cb50SEnrico Granata AddStringSummary(vectors_category_sp, 1018*5548cb50SEnrico Granata "", 1019*5548cb50SEnrico Granata ConstString("vUInt8"), 1020*5548cb50SEnrico Granata vector_flags); 1021*5548cb50SEnrico Granata AddStringSummary(vectors_category_sp, 1022*5548cb50SEnrico Granata "", 1023*5548cb50SEnrico Granata ConstString("vUInt16"), 1024*5548cb50SEnrico Granata vector_flags); 1025*5548cb50SEnrico Granata AddStringSummary(vectors_category_sp, 1026*5548cb50SEnrico Granata "", 1027*5548cb50SEnrico Granata ConstString("vUInt32"), 1028*5548cb50SEnrico Granata vector_flags); 1029*5548cb50SEnrico Granata AddStringSummary(vectors_category_sp, 1030*5548cb50SEnrico Granata "", 1031*5548cb50SEnrico Granata ConstString("vBool32"), 1032*5548cb50SEnrico Granata vector_flags); 1033*5548cb50SEnrico Granata } 1034