bool lldb_private::formatters::ObjCBOOLSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options) { const uint32_t type_info = valobj.GetCompilerType().GetTypeInfo(); ValueObjectSP real_guy_sp = valobj.GetSP(); if (type_info & eTypeIsPointer) { Error err; real_guy_sp = valobj.Dereference(err); if (err.Fail() || !real_guy_sp) return false; } else if (type_info & eTypeIsReference) { real_guy_sp = valobj.GetChildAtIndex(0, true); if (!real_guy_sp) return false; } uint64_t value = real_guy_sp->GetValueAsUnsigned(0); if (value == 0) { stream.Printf("NO"); return true; } stream.Printf("YES"); return true; }
bool lldb_private::formatters::GoStringSummaryProvider( ValueObject &valobj, Stream &stream, const TypeSummaryOptions &opts) { ProcessSP process_sp = valobj.GetProcessSP(); if (!process_sp) return false; if (valobj.IsPointerType()) { Error err; ValueObjectSP deref = valobj.Dereference(err); if (!err.Success()) return false; return GoStringSummaryProvider(*deref, stream, opts); } ConstString str_name("str"); ConstString len_name("len"); ValueObjectSP data_sp = valobj.GetChildMemberWithName(str_name, true); ValueObjectSP len_sp = valobj.GetChildMemberWithName(len_name, true); if (!data_sp || !len_sp) return false; bool success; lldb::addr_t valobj_addr = data_sp->GetValueAsUnsigned(0, &success); if (!success) return false; uint64_t length = len_sp->GetValueAsUnsigned(0); if (length == 0) { stream.Printf("\"\""); return true; } StringPrinter::ReadStringAndDumpToStreamOptions options(valobj); options.SetLocation(valobj_addr); options.SetProcessSP(process_sp); options.SetStream(&stream); options.SetSourceSize(length); options.SetNeedsZeroTermination(false); options.SetLanguage(eLanguageTypeGo); if (!StringPrinter::ReadStringAndDumpToStream< StringPrinter::StringElementType::UTF8>(options)) { stream.Printf("Summary Unavailable"); return true; } return true; }
bool lldb_private::formatters::JavaStringSummaryProvider( ValueObject &valobj, Stream &stream, const TypeSummaryOptions &opts) { if (valobj.IsPointerOrReferenceType()) { Error error; ValueObjectSP deref = valobj.Dereference(error); if (error.Fail()) return false; return JavaStringSummaryProvider(*deref, stream, opts); } ProcessSP process_sp = valobj.GetProcessSP(); if (!process_sp) return false; ConstString data_name("value"); ConstString length_name("count"); ValueObjectSP length_sp = valobj.GetChildMemberWithName(length_name, true); ValueObjectSP data_sp = valobj.GetChildMemberWithName(data_name, true); if (!data_sp || !length_sp) return false; bool success = false; uint64_t length = length_sp->GetValueAsUnsigned(0, &success); if (!success) return false; if (length == 0) { stream.Printf("\"\""); return true; } lldb::addr_t valobj_addr = data_sp->GetAddressOf(); StringPrinter::ReadStringAndDumpToStreamOptions options(valobj); options.SetLocation(valobj_addr); options.SetProcessSP(process_sp); options.SetStream(&stream); options.SetSourceSize(length); options.SetNeedsZeroTermination(false); options.SetLanguage(eLanguageTypeJava); if (StringPrinter::ReadStringAndDumpToStream< StringPrinter::StringElementType::UTF16>(options)) return true; stream.Printf("Summary Unavailable"); return true; }
bool lldb_private::formatters::JavaArraySummaryProvider( ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) { if (valobj.IsPointerOrReferenceType()) { Error error; ValueObjectSP deref = valobj.Dereference(error); if (error.Fail()) return false; return JavaArraySummaryProvider(*deref, stream, options); } CompilerType type = valobj.GetCompilerType(); uint32_t size = JavaASTContext::CalculateArraySize(type, valobj); if (size == UINT32_MAX) return false; stream.Printf("[%u]{...}", size); return true; }