summaryrefslogtreecommitdiffstats
path: root/contrib/llvm/tools/lldb/source/DataFormatters
diff options
context:
space:
mode:
authoremaste <emaste@FreeBSD.org>2014-11-26 16:48:12 +0000
committeremaste <emaste@FreeBSD.org>2014-11-26 16:48:12 +0000
commit0147dda7de9580d13778ecb4c9e92b83b7a63911 (patch)
treeb16dc95f693ed59342b6141cd3fd9f59a6cd7e7e /contrib/llvm/tools/lldb/source/DataFormatters
parentbfd4c39c61ae9b29542625bb12b6f7f4b1f8c727 (diff)
parent01ee1789d6aa7294e5966a97f8d29387f6f81699 (diff)
downloadFreeBSD-src-0147dda7de9580d13778ecb4c9e92b83b7a63911.zip
FreeBSD-src-0147dda7de9580d13778ecb4c9e92b83b7a63911.tar.gz
Update LLDB snapshot to upstream r216948 (git 50f7fe44)
This is approximately "LLDB 3.5" although with a little bit of skew, and will go along with the Clang 3.5 import. Sponsored by: DARPA, AFRL
Diffstat (limited to 'contrib/llvm/tools/lldb/source/DataFormatters')
-rw-r--r--contrib/llvm/tools/lldb/source/DataFormatters/CF.cpp6
-rw-r--r--contrib/llvm/tools/lldb/source/DataFormatters/CXXFormatterFunctions.cpp116
-rw-r--r--contrib/llvm/tools/lldb/source/DataFormatters/Cocoa.cpp6
-rw-r--r--contrib/llvm/tools/lldb/source/DataFormatters/FormatManager.cpp149
-rw-r--r--contrib/llvm/tools/lldb/source/DataFormatters/LibCxx.cpp10
-rw-r--r--contrib/llvm/tools/lldb/source/DataFormatters/LibCxxList.cpp56
-rw-r--r--contrib/llvm/tools/lldb/source/DataFormatters/LibCxxMap.cpp10
-rw-r--r--contrib/llvm/tools/lldb/source/DataFormatters/LibCxxUnorderedMap.cpp7
-rw-r--r--contrib/llvm/tools/lldb/source/DataFormatters/LibStdcpp.cpp2
-rw-r--r--contrib/llvm/tools/lldb/source/DataFormatters/NSArray.cpp384
-rw-r--r--contrib/llvm/tools/lldb/source/DataFormatters/NSDictionary.cpp12
-rw-r--r--contrib/llvm/tools/lldb/source/DataFormatters/NSSet.cpp6
-rw-r--r--contrib/llvm/tools/lldb/source/DataFormatters/TypeFormat.cpp28
-rw-r--r--contrib/llvm/tools/lldb/source/DataFormatters/TypeSummary.cpp23
-rw-r--r--contrib/llvm/tools/lldb/source/DataFormatters/TypeSynthetic.cpp4
-rw-r--r--contrib/llvm/tools/lldb/source/DataFormatters/ValueObjectPrinter.cpp10
16 files changed, 682 insertions, 147 deletions
diff --git a/contrib/llvm/tools/lldb/source/DataFormatters/CF.cpp b/contrib/llvm/tools/lldb/source/DataFormatters/CF.cpp
index a4b7a12..e131b68 100644
--- a/contrib/llvm/tools/lldb/source/DataFormatters/CF.cpp
+++ b/contrib/llvm/tools/lldb/source/DataFormatters/CF.cpp
@@ -85,7 +85,7 @@ lldb_private::formatters::CFBagSummaryProvider (ValueObject& valobj, Stream& str
ValueObjectSP count_sp;
StreamString expr;
expr.Printf("(int)CFBagGetCount((void*)0x%" PRIx64 ")",valobj.GetPointerValue());
- if (process_sp->GetTarget().EvaluateExpression(expr.GetData(), frame_sp.get(), count_sp) != eExecutionCompleted)
+ if (process_sp->GetTarget().EvaluateExpression(expr.GetData(), frame_sp.get(), count_sp) != eExpressionCompleted)
return false;
if (!count_sp)
return false;
@@ -160,7 +160,7 @@ lldb_private::formatters::CFBitVectorSummaryProvider (ValueObject& valobj, Strea
if (error.Fail() || num_bytes == 0)
return false;
uint8_t *bytes = buffer_sp->GetBytes();
- for (int byte_idx = 0; byte_idx < num_bytes-1; byte_idx++)
+ for (uint64_t byte_idx = 0; byte_idx < num_bytes-1; byte_idx++)
{
uint8_t byte = bytes[byte_idx];
bool bit0 = (byte & 1) == 1;
@@ -279,7 +279,7 @@ lldb_private::formatters::CFBinaryHeapSummaryProvider (ValueObject& valobj, Stre
ValueObjectSP count_sp;
StreamString expr;
expr.Printf("(int)CFBinaryHeapGetCount((void*)0x%" PRIx64 ")",valobj.GetPointerValue());
- if (process_sp->GetTarget().EvaluateExpression(expr.GetData(), frame_sp.get(), count_sp) != eExecutionCompleted)
+ if (process_sp->GetTarget().EvaluateExpression(expr.GetData(), frame_sp.get(), count_sp) != eExpressionCompleted)
return false;
if (!count_sp)
return false;
diff --git a/contrib/llvm/tools/lldb/source/DataFormatters/CXXFormatterFunctions.cpp b/contrib/llvm/tools/lldb/source/DataFormatters/CXXFormatterFunctions.cpp
index 136c8c5..ae5b35f 100644
--- a/contrib/llvm/tools/lldb/source/DataFormatters/CXXFormatterFunctions.cpp
+++ b/contrib/llvm/tools/lldb/source/DataFormatters/CXXFormatterFunctions.cpp
@@ -20,8 +20,8 @@
#include "lldb/Core/ValueObjectConstResult.h"
#include "lldb/Host/Endian.h"
#include "lldb/Symbol/ClangASTContext.h"
-#include "lldb/Target/ObjCLanguageRuntime.h"
#include "lldb/Target/Target.h"
+#include "lldb/Target/Thread.h"
#include <algorithm>
@@ -29,6 +29,23 @@ using namespace lldb;
using namespace lldb_private;
using namespace lldb_private::formatters;
+StackFrame*
+lldb_private::formatters::GetViableFrame (ExecutionContext exe_ctx)
+{
+ StackFrame* frame = exe_ctx.GetFramePtr();
+ if (frame)
+ return frame;
+
+ Process* process = exe_ctx.GetProcessPtr();
+ if (!process)
+ return nullptr;
+
+ ThreadSP thread_sp(process->GetThreadList().GetSelectedThread());
+ if (thread_sp)
+ return thread_sp->GetSelectedFrame().get();
+ return nullptr;
+}
+
bool
lldb_private::formatters::ExtractValueFromObjCExpression (ValueObject &valobj,
const char* target_type,
@@ -44,7 +61,7 @@ lldb_private::formatters::ExtractValueFromObjCExpression (ValueObject &valobj,
ExecutionContext exe_ctx (valobj.GetExecutionContextRef());
lldb::ValueObjectSP result_sp;
Target* target = exe_ctx.GetTargetPtr();
- StackFrame* stack_frame = exe_ctx.GetFramePtr();
+ StackFrame* stack_frame = GetViableFrame(exe_ctx);
if (!target || !stack_frame)
return false;
@@ -78,7 +95,7 @@ lldb_private::formatters::ExtractSummaryFromObjCExpression (ValueObject &valobj,
ExecutionContext exe_ctx (valobj.GetExecutionContextRef());
lldb::ValueObjectSP result_sp;
Target* target = exe_ctx.GetTargetPtr();
- StackFrame* stack_frame = exe_ctx.GetFramePtr();
+ StackFrame* stack_frame = GetViableFrame(exe_ctx);
if (!target || !stack_frame)
return false;
@@ -116,7 +133,7 @@ lldb_private::formatters::CallSelectorOnObject (ValueObject &valobj,
ExecutionContext exe_ctx (valobj.GetExecutionContextRef());
lldb::ValueObjectSP result_sp;
Target* target = exe_ctx.GetTargetPtr();
- StackFrame* stack_frame = exe_ctx.GetFramePtr();
+ StackFrame* stack_frame = GetViableFrame(exe_ctx);
if (!target || !stack_frame)
return valobj_sp;
@@ -153,7 +170,7 @@ lldb_private::formatters::CallSelectorOnObject (ValueObject &valobj,
ExecutionContext exe_ctx (valobj.GetExecutionContextRef());
lldb::ValueObjectSP result_sp;
Target* target = exe_ctx.GetTargetPtr();
- StackFrame* stack_frame = exe_ctx.GetFramePtr();
+ StackFrame* stack_frame = GetViableFrame(exe_ctx);
if (!target || !stack_frame)
return valobj_sp;
@@ -576,7 +593,11 @@ bool
lldb_private::formatters::Char16SummaryProvider (ValueObject& valobj, Stream& stream)
{
DataExtractor data;
- valobj.GetData(data);
+ Error error;
+ valobj.GetData(data, error);
+
+ if (error.Fail())
+ return false;
std::string value;
valobj.GetValueAsCString(lldb::eFormatUnicode16, value);
@@ -590,7 +611,11 @@ bool
lldb_private::formatters::Char32SummaryProvider (ValueObject& valobj, Stream& stream)
{
DataExtractor data;
- valobj.GetData(data);
+ Error error;
+ valobj.GetData(data, error);
+
+ if (error.Fail())
+ return false;
std::string value;
valobj.GetValueAsCString(lldb::eFormatUnicode32, value);
@@ -604,7 +629,11 @@ bool
lldb_private::formatters::WCharSummaryProvider (ValueObject& valobj, Stream& stream)
{
DataExtractor data;
- valobj.GetData(data);
+ Error error;
+ valobj.GetData(data, error);
+
+ if (error.Fail())
+ return false;
clang::ASTContext* ast = valobj.GetClangType().GetASTContext();
@@ -954,6 +983,61 @@ ReadAsciiBufferAndDumpToStream (lldb::addr_t location,
}
bool
+lldb_private::formatters::NSTaggedString_SummaryProvider (ObjCLanguageRuntime::ClassDescriptorSP descriptor, Stream& stream)
+{
+ if (!descriptor)
+ return false;
+ uint64_t len_bits = 0, data_bits = 0;
+ if (!descriptor->GetTaggedPointerInfo(&len_bits,&data_bits,nullptr))
+ return false;
+
+ static const int g_MaxNonBitmaskedLen = 7; //TAGGED_STRING_UNPACKED_MAXLEN
+ static const int g_SixbitMaxLen = 9;
+ static const int g_fiveBitMaxLen = 11;
+
+ static const char *sixBitToCharLookup = "eilotrm.apdnsIc ufkMShjTRxgC4013" "bDNvwyUL2O856P-B79AFKEWV_zGJ/HYX";
+
+ if (len_bits > g_fiveBitMaxLen)
+ return false;
+
+ // this is a fairly ugly trick - pretend that the numeric value is actually a char*
+ // this works under a few assumptions:
+ // little endian architecture
+ // sizeof(uint64_t) > g_MaxNonBitmaskedLen
+ if (len_bits <= g_MaxNonBitmaskedLen)
+ {
+ stream.Printf("@\"%s\"",(const char*)&data_bits);
+ return true;
+ }
+
+ // if the data is bitmasked, we need to actually process the bytes
+ uint8_t bitmask = 0;
+ uint8_t shift_offset = 0;
+
+ if (len_bits <= g_SixbitMaxLen)
+ {
+ bitmask = 0x03f;
+ shift_offset = 6;
+ }
+ else
+ {
+ bitmask = 0x01f;
+ shift_offset = 5;
+ }
+
+ std::vector<uint8_t> bytes;
+ bytes.resize(len_bits);
+ for (; len_bits > 0; data_bits >>= shift_offset, --len_bits)
+ {
+ uint8_t packed = data_bits & bitmask;
+ bytes.insert(bytes.begin(), sixBitToCharLookup[packed]);
+ }
+
+ stream.Printf("@\"%s\"",&bytes[0]);
+ return true;
+}
+
+bool
lldb_private::formatters::NSStringSummaryProvider (ValueObject& valobj, Stream& stream)
{
ProcessSP process_sp = valobj.GetProcessSP();
@@ -982,6 +1066,12 @@ lldb_private::formatters::NSStringSummaryProvider (ValueObject& valobj, Stream&
if (!class_name || !*class_name)
return false;
+ bool is_tagged_ptr = (0 == strcmp(class_name,"NSTaggedPointerString")) && descriptor->GetTaggedPointerInfo();
+ // for a tagged pointer, the descriptor has everything we need
+ if (is_tagged_ptr)
+ return NSTaggedString_SummaryProvider(descriptor, stream);
+
+ // if not a tagged pointer that we know about, try the normal route
uint64_t info_bits_location = valobj_addr + ptr_size;
if (process_sp->GetByteOrder() != lldb::eByteOrderLittle)
info_bits_location += 3;
@@ -1144,7 +1234,10 @@ lldb_private::formatters::NSAttributedStringSummaryProvider (ValueObject& valobj
if (!child_ptr_sp)
return false;
DataExtractor data;
- child_ptr_sp->GetData(data);
+ Error error;
+ child_ptr_sp->GetData(data, error);
+ if (error.Fail())
+ return false;
ValueObjectSP child_sp(child_ptr_sp->CreateValueObjectFromData("string_data", data, exe_ctx, type));
child_sp->GetValueAsUnsigned(0);
if (child_sp)
@@ -1218,7 +1311,10 @@ lldb_private::formatters::ObjCSELSummaryProvider (ValueObject& valobj, Stream& s
else
{
DataExtractor data;
- valobj.GetData(data);
+ Error error;
+ valobj.GetData(data, error);
+ if (error.Fail())
+ return false;
valobj_sp = ValueObject::CreateValueObjectFromData("text", data, exe_ctx, charstar);
}
diff --git a/contrib/llvm/tools/lldb/source/DataFormatters/Cocoa.cpp b/contrib/llvm/tools/lldb/source/DataFormatters/Cocoa.cpp
index 555954d..8e92de4 100644
--- a/contrib/llvm/tools/lldb/source/DataFormatters/Cocoa.cpp
+++ b/contrib/llvm/tools/lldb/source/DataFormatters/Cocoa.cpp
@@ -342,8 +342,7 @@ lldb_private::formatters::NSNumberSummaryProvider (ValueObject& valobj, Stream&
stream.Printf("(long)%" PRId64,value);
break;
default:
- stream.Printf("unexpected value:(info=%" PRIu64 ", value=%" PRIu64,i_bits,value);
- break;
+ return false;
}
return true;
}
@@ -402,8 +401,7 @@ lldb_private::formatters::NSNumberSummaryProvider (ValueObject& valobj, Stream&
break;
}
default:
- stream.Printf("unexpected value: dt=%d",data_type);
- break;
+ return false;
}
return true;
}
diff --git a/contrib/llvm/tools/lldb/source/DataFormatters/FormatManager.cpp b/contrib/llvm/tools/lldb/source/DataFormatters/FormatManager.cpp
index 751e612..28d108f 100644
--- a/contrib/llvm/tools/lldb/source/DataFormatters/FormatManager.cpp
+++ b/contrib/llvm/tools/lldb/source/DataFormatters/FormatManager.cpp
@@ -21,6 +21,7 @@
#include "lldb/Interpreter/ScriptInterpreterPython.h"
#include "lldb/Target/ExecutionContext.h"
#include "lldb/Target/Platform.h"
+#include "llvm/ADT/STLExtras.h"
using namespace lldb;
using namespace lldb_private;
@@ -76,8 +77,7 @@ g_format_infos[] =
{ eFormatVoid , 'v' , "void" }
};
-static uint32_t
-g_num_format_infos = sizeof(g_format_infos)/sizeof(FormatInfo);
+static uint32_t g_num_format_infos = llvm::array_lengthof(g_format_infos);
static bool
GetFormatFromFormatChar (char format_char, Format &format)
@@ -186,7 +186,11 @@ FormatManager::GetPossibleMatches (ValueObject& valobj,
}
entries.push_back({type_name,reason,did_strip_ptr,did_strip_ref,did_strip_typedef});
- if (clang_type.IsReferenceType())
+ ConstString display_type_name(clang_type.GetDisplayTypeName());
+ if (display_type_name != type_name)
+ entries.push_back({display_type_name,reason,did_strip_ptr,did_strip_ref,did_strip_typedef});
+
+ for (bool is_rvalue_ref = true, j = true; j && clang_type.IsReferenceType(nullptr, &is_rvalue_ref); j = false)
{
ClangASTType non_ref_type = clang_type.GetNonReferenceType();
GetPossibleMatches(valobj,
@@ -197,8 +201,22 @@ FormatManager::GetPossibleMatches (ValueObject& valobj,
did_strip_ptr,
true,
did_strip_typedef);
+ if (non_ref_type.IsTypedefType())
+ {
+ ClangASTType deffed_referenced_type = non_ref_type.GetTypedefedType();
+ deffed_referenced_type = is_rvalue_ref ? deffed_referenced_type.GetRValueReferenceType() : deffed_referenced_type.GetLValueReferenceType();
+ GetPossibleMatches(valobj,
+ deffed_referenced_type,
+ reason | lldb_private::eFormatterChoiceCriterionNavigatedTypedefs,
+ use_dynamic,
+ entries,
+ did_strip_ptr,
+ did_strip_ref,
+ true); // this is not exactly the usual meaning of stripping typedefs
+ }
}
- else if (clang_type.IsPointerType())
+
+ if (clang_type.IsPointerType())
{
ClangASTType non_ptr_type = clang_type.GetPointeeType();
GetPossibleMatches(valobj,
@@ -209,6 +227,18 @@ FormatManager::GetPossibleMatches (ValueObject& valobj,
true,
did_strip_ref,
did_strip_typedef);
+ if (non_ptr_type.IsTypedefType())
+ {
+ ClangASTType deffed_pointed_type = non_ptr_type.GetTypedefedType().GetPointerType();
+ GetPossibleMatches(valobj,
+ deffed_pointed_type,
+ reason | lldb_private::eFormatterChoiceCriterionNavigatedTypedefs,
+ use_dynamic,
+ entries,
+ did_strip_ptr,
+ did_strip_ref,
+ true); // this is not exactly the usual meaning of stripping typedefs
+ }
}
bool canBeObjCDynamic = clang_type.IsPossibleDynamicType (NULL,
false, // no C
@@ -507,7 +537,7 @@ FormatManager::ShouldPrintAsOneLiner (ValueObject& valobj)
if (child_sp->GetSummaryFormat())
{
// and it wants children, then bail out
- if (child_sp->GetSummaryFormat()->DoesPrintChildren())
+ if (child_sp->GetSummaryFormat()->DoesPrintChildren(child_sp.get()))
return false;
}
@@ -553,11 +583,17 @@ GetTypeForCache (ValueObject& valobj,
return ConstString();
}
-static lldb::TypeFormatImplSP
-GetHardcodedFormat (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic)
+lldb::TypeFormatImplSP
+FormatManager::GetHardcodedFormat (ValueObject& valobj,
+ lldb::DynamicValueType use_dynamic)
{
- return lldb::TypeFormatImplSP();
+ for (const auto& candidate: m_hardcoded_formats)
+ {
+ auto result = candidate(valobj,use_dynamic,*this);
+ if (result)
+ return result;
+ }
+ return nullptr;
}
lldb::TypeFormatImplSP
@@ -591,10 +627,12 @@ FormatManager::GetFormat (ValueObject& valobj,
log->Printf("[FormatManager::GetFormat] Search failed. Giving hardcoded a chance.");
retval = GetHardcodedFormat(valobj, use_dynamic);
}
- if (valobj_type)
+ else if (valobj_type)
{
if (log)
- log->Printf("[FormatManager::GetFormat] Caching %p for type %s",retval.get(),valobj_type.AsCString("<invalid>"));
+ log->Printf("[FormatManager::GetFormat] Caching %p for type %s",
+ static_cast<void*>(retval.get()),
+ valobj_type.AsCString("<invalid>"));
m_format_cache.SetFormat(valobj_type,retval);
}
if (log && log->GetDebug())
@@ -602,11 +640,17 @@ FormatManager::GetFormat (ValueObject& valobj,
return retval;
}
-static lldb::TypeSummaryImplSP
-GetHardcodedSummaryFormat (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic)
+lldb::TypeSummaryImplSP
+FormatManager::GetHardcodedSummaryFormat (ValueObject& valobj,
+ lldb::DynamicValueType use_dynamic)
{
- return lldb::TypeSummaryImplSP();
+ for (const auto& candidate: m_hardcoded_summaries)
+ {
+ auto result = candidate(valobj,use_dynamic,*this);
+ if (result)
+ return result;
+ }
+ return nullptr;
}
lldb::TypeSummaryImplSP
@@ -640,10 +684,12 @@ FormatManager::GetSummaryFormat (ValueObject& valobj,
log->Printf("[FormatManager::GetSummaryFormat] Search failed. Giving hardcoded a chance.");
retval = GetHardcodedSummaryFormat(valobj, use_dynamic);
}
- if (valobj_type)
+ else if (valobj_type)
{
if (log)
- log->Printf("[FormatManager::GetSummaryFormat] Caching %p for type %s",retval.get(),valobj_type.AsCString("<invalid>"));
+ log->Printf("[FormatManager::GetSummaryFormat] Caching %p for type %s",
+ static_cast<void*>(retval.get()),
+ valobj_type.AsCString("<invalid>"));
m_format_cache.SetSummary(valobj_type,retval);
}
if (log && log->GetDebug())
@@ -652,11 +698,17 @@ FormatManager::GetSummaryFormat (ValueObject& valobj,
}
#ifndef LLDB_DISABLE_PYTHON
-static lldb::SyntheticChildrenSP
-GetHardcodedSyntheticChildren (ValueObject& valobj,
- lldb::DynamicValueType use_dynamic)
+lldb::SyntheticChildrenSP
+FormatManager::GetHardcodedSyntheticChildren (ValueObject& valobj,
+ lldb::DynamicValueType use_dynamic)
{
- return lldb::SyntheticChildrenSP();
+ for (const auto& candidate: m_hardcoded_synthetics)
+ {
+ auto result = candidate(valobj,use_dynamic,*this);
+ if (result)
+ return result;
+ }
+ return nullptr;
}
lldb::SyntheticChildrenSP
@@ -690,10 +742,12 @@ FormatManager::GetSyntheticChildren (ValueObject& valobj,
log->Printf("[FormatManager::GetSyntheticChildren] Search failed. Giving hardcoded a chance.");
retval = GetHardcodedSyntheticChildren(valobj, use_dynamic);
}
- if (valobj_type)
+ else if (valobj_type)
{
if (log)
- log->Printf("[FormatManager::GetSyntheticChildren] Caching %p for type %s",retval.get(),valobj_type.AsCString("<invalid>"));
+ log->Printf("[FormatManager::GetSyntheticChildren] Caching %p for type %s",
+ static_cast<void*>(retval.get()),
+ valobj_type.AsCString("<invalid>"));
m_format_cache.SetSynthetic(valobj_type,retval);
}
if (log && log->GetDebug())
@@ -716,12 +770,17 @@ FormatManager::FormatManager() :
m_coregraphics_category_name(ConstString("CoreGraphics")),
m_coreservices_category_name(ConstString("CoreServices")),
m_vectortypes_category_name(ConstString("VectorTypes")),
- m_appkit_category_name(ConstString("AppKit"))
+ m_appkit_category_name(ConstString("AppKit")),
+ m_hardcoded_formats(),
+ m_hardcoded_summaries(),
+ m_hardcoded_synthetics()
+
{
LoadSystemFormatters();
LoadLibStdcppFormatters();
LoadLibcxxFormatters();
LoadObjCFormatters();
+ LoadHardcodedFormatters();
EnableCategory(m_objc_category_name,TypeCategoryMap::Last);
EnableCategory(m_corefoundation_category_name,TypeCategoryMap::Last);
@@ -768,28 +827,6 @@ AddStringSummary(TypeCategoryImpl::SharedPointer category_sp,
#ifndef LLDB_DISABLE_PYTHON
static void
-AddScriptSummary(TypeCategoryImpl::SharedPointer category_sp,
- const char* funct_name,
- ConstString type_name,
- TypeSummaryImpl::Flags flags,
- bool regex = false)
-{
-
- std::string code(" ");
- code.append(funct_name).append("(valobj,internal_dict)");
-
- lldb::TypeSummaryImplSP summary_sp(new ScriptSummaryFormat(flags,
- funct_name,
- code.c_str()));
- if (regex)
- category_sp->GetRegexTypeSummariesContainer()->Add(RegularExpressionSP(new RegularExpression(type_name.AsCString())),summary_sp);
- else
- category_sp->GetTypeSummariesContainer()->Add(type_name, summary_sp);
-}
-#endif
-
-#ifndef LLDB_DISABLE_PYTHON
-static void
AddCXXSummary (TypeCategoryImpl::SharedPointer category_sp,
CXXFunctionSummaryFormat::Callback funct,
const char* description,
@@ -956,6 +993,7 @@ FormatManager::LoadLibcxxFormatters()
AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdListSyntheticFrontEndCreator, "libc++ std::list synthetic children", ConstString("^std::__1::list<.+>(( )?&)?$"), stl_synth_flags, true);
AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdMapSyntheticFrontEndCreator, "libc++ std::map synthetic children", ConstString("^std::__1::map<.+> >(( )?&)?$"), stl_synth_flags, true);
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);
+ AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEndCreator, "libc++ std::vector<bool> synthetic children", ConstString("std::__1::vector<bool, std::__1::allocator<bool> >"), stl_synth_flags);
AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdMapSyntheticFrontEndCreator, "libc++ std::set synthetic children", ConstString("^std::__1::set<.+> >(( )?&)?$"), stl_synth_flags, true);
AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdMapSyntheticFrontEndCreator, "libc++ std::multiset synthetic children", ConstString("^std::__1::multiset<.+> >(( )?&)?$"), stl_synth_flags, true);
AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxStdMapSyntheticFrontEndCreator, "libc++ std::multimap synthetic children", ConstString("^std::__1::multimap<.+> >(( )?&)?$"), stl_synth_flags, true);
@@ -969,12 +1007,14 @@ FormatManager::LoadLibcxxFormatters()
AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEndCreator, "weak_ptr synthetic children", ConstString("^(std::__1::)weak_ptr<.+>(( )?&)?$"), stl_synth_flags, true);
stl_summary_flags.SetDontShowChildren(false);stl_summary_flags.SetSkipPointers(false);
+ AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEndCreator, "libc++ std::vector<bool> synthetic children", ConstString("std::__1::vector<bool, std::__1::allocator<bool> >"), stl_synth_flags);
AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::vector summary provider", ConstString("^std::__1::vector<.+>(( )?&)?$"), stl_summary_flags, true);
AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::list summary provider", ConstString("^std::__1::list<.+>(( )?&)?$"), stl_summary_flags, true);
AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::map summary provider", ConstString("^std::__1::map<.+>(( )?&)?$"), stl_summary_flags, true);
AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::deque summary provider", ConstString("^std::__1::deque<.+>(( )?&)?$"), stl_summary_flags, true);
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);
+ AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::vector<bool> summary provider", ConstString("std::__1::vector<bool, std::__1::allocator<bool> >"), stl_summary_flags);
AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::set summary provider", ConstString("^std::__1::set<.+>(( )?&)?$"), stl_summary_flags, true);
AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::multiset summary provider", ConstString("^std::__1::multiset<.+>(( )?&)?$"), stl_summary_flags, true);
AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::multimap summary provider", ConstString("^std::__1::multimap<.+>(( )?&)?$"), stl_summary_flags, true);
@@ -987,6 +1027,7 @@ FormatManager::LoadLibcxxFormatters()
AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibCxxVectorIteratorSyntheticFrontEndCreator, "std::vector iterator synthetic children", ConstString("^std::__1::__wrap_iter<.+>$"), stl_synth_flags, true);
+ AddCXXSummary(libcxx_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider, "libc++ std::vector<bool> summary provider", ConstString("std::__1::vector<bool, std::__1::allocator<bool> >"), stl_summary_flags);
AddCXXSynthetic(libcxx_category_sp, lldb_private::formatters::LibCxxMapIteratorSyntheticFrontEndCreator, "std::map iterator synthetic children", ConstString("^std::__1::__map_iterator<.+>$"), stl_synth_flags, true);
AddFilter(libcxx_category_sp, {"__a_"}, "libc++ std::atomic filter", ConstString("^std::__1::atomic<.*>$"), stl_synth_flags, true);
@@ -1253,6 +1294,7 @@ FormatManager::LoadObjCFormatters()
AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("__NSDictionaryM"), ScriptedSyntheticChildren::Flags());
AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("__NSDictionaryI"), ScriptedSyntheticChildren::Flags());
+ AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("__NSCFDictionary"), ScriptedSyntheticChildren::Flags());
AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("NSDictionary"), ScriptedSyntheticChildren::Flags());
AddCXXSynthetic(appkit_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("NSMutableDictionary"), ScriptedSyntheticChildren::Flags());
AddCXXSynthetic(corefoundation_category_sp, lldb_private::formatters::NSDictionarySyntheticFrontEndCreator, "NSDictionary synthetic children", ConstString("CFDictionaryRef"), ScriptedSyntheticChildren::Flags());
@@ -1294,6 +1336,7 @@ FormatManager::LoadObjCFormatters()
AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("NSData"), appkit_flags);
AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("NSConcreteData"), appkit_flags);
AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("NSConcreteMutableData"), appkit_flags);
+ AddCXXSummary(appkit_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("NSMutableData"), appkit_flags);
AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSDataSummaryProvider<false>, "NSData summary provider", ConstString("__NSCFData"), appkit_flags);
AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSDataSummaryProvider<true>, "NSData summary provider", ConstString("CFDataRef"), appkit_flags);
AddCXXSummary(corefoundation_category_sp, lldb_private::formatters::NSDataSummaryProvider<true>, "NSData summary provider", ConstString("CFMutableDataRef"), appkit_flags);
@@ -1419,3 +1462,17 @@ FormatManager::LoadObjCFormatters()
ConstString("vBool32"),
vector_flags);
}
+
+void
+FormatManager::LoadHardcodedFormatters()
+{
+ {
+ // insert code to load formats here
+ }
+ {
+ // insert code to load summaries here
+ }
+ {
+ // insert code to load synthetics here
+ }
+}
diff --git a/contrib/llvm/tools/lldb/source/DataFormatters/LibCxx.cpp b/contrib/llvm/tools/lldb/source/DataFormatters/LibCxx.cpp
index 6380d97..1742026 100644
--- a/contrib/llvm/tools/lldb/source/DataFormatters/LibCxx.cpp
+++ b/contrib/llvm/tools/lldb/source/DataFormatters/LibCxx.cpp
@@ -139,13 +139,11 @@ lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd::GetChildAtIndex (si
return ValueObjectSP();
}
bool bit_set = ((byte & mask) != 0);
- ValueObjectSP retval_sp;
DataBufferSP buffer_sp(new DataBufferHeap(m_bool_type.GetByteSize(),0));
if (bit_set && buffer_sp && buffer_sp->GetBytes())
*(buffer_sp->GetBytes()) = 1; // regardless of endianness, anything non-zero is true
- StreamString name; name.Printf("[%zu]",idx);
- DataExtractor data(buffer_sp, process_sp->GetByteOrder(), process_sp->GetAddressByteSize());
- retval_sp = ValueObject::CreateValueObjectFromData(name.GetData(), data, m_exe_ctx_ref, m_bool_type);
+ StreamString name; name.Printf("[%" PRIu64 "]", (uint64_t)idx);
+ ValueObjectSP retval_sp(ValueObject::CreateValueObjectFromData(name.GetData(), DataExtractor(buffer_sp, process_sp->GetByteOrder(), process_sp->GetAddressByteSize()), m_exe_ctx_ref, m_bool_type));
if (retval_sp)
m_children[idx] = retval_sp;
return retval_sp;
@@ -168,8 +166,6 @@ lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd::Update()
ValueObjectSP valobj_sp = m_backend.GetSP();
if (!valobj_sp)
return false;
- if (!valobj_sp)
- return false;
m_exe_ctx_ref = valobj_sp->GetExecutionContextRef();
ValueObjectSP size_sp(valobj_sp->GetChildMemberWithName(ConstString("__size_"), true));
if (!size_sp)
@@ -499,7 +495,7 @@ lldb_private::formatters::LibcxxStdVectorSyntheticFrontEnd::GetChildAtIndex (siz
uint64_t offset = idx * m_element_size;
offset = offset + m_start->GetValueAsUnsigned(0);
StreamString name;
- name.Printf("[%zu]",idx);
+ name.Printf("[%" PRIu64 "]", (uint64_t)idx);
ValueObjectSP child_sp = ValueObject::CreateValueObjectFromAddress(name.GetData(), offset, m_backend.GetExecutionContextRef(), m_element_type);
m_children[idx] = child_sp;
return child_sp;
diff --git a/contrib/llvm/tools/lldb/source/DataFormatters/LibCxxList.cpp b/contrib/llvm/tools/lldb/source/DataFormatters/LibCxxList.cpp
index de2ca1b..7d6db1a 100644
--- a/contrib/llvm/tools/lldb/source/DataFormatters/LibCxxList.cpp
+++ b/contrib/llvm/tools/lldb/source/DataFormatters/LibCxxList.cpp
@@ -33,20 +33,20 @@ public:
ListEntry (const ListEntry& rhs) : m_entry_sp(rhs.m_entry_sp) {}
ListEntry (ValueObject* entry) : m_entry_sp(entry ? entry->GetSP() : ValueObjectSP()) {}
- ValueObjectSP
+ ListEntry
next ()
{
if (!m_entry_sp)
- return m_entry_sp;
- return m_entry_sp->GetChildMemberWithName(ConstString("__next_"), true);
+ return ListEntry();
+ return ListEntry(m_entry_sp->GetChildMemberWithName(ConstString("__next_"), true));
}
- ValueObjectSP
+ ListEntry
prev ()
{
if (!m_entry_sp)
- return m_entry_sp;
- return m_entry_sp->GetChildMemberWithName(ConstString("__prev_"), true);
+ return ListEntry();
+ return ListEntry(m_entry_sp->GetChildMemberWithName(ConstString("__prev_"), true));
}
uint64_t
@@ -63,6 +63,11 @@ public:
return (value() == 0);
}
+ explicit operator bool ()
+ {
+ return GetEntry().get() != nullptr && null() == false;
+ }
+
ValueObjectSP
GetEntry ()
{
@@ -130,13 +135,13 @@ protected:
void
next ()
{
- m_entry.SetEntry(m_entry.next());
+ m_entry = m_entry.next();
}
void
prev ()
{
- m_entry.SetEntry(m_entry.prev());
+ m_entry = m_entry.prev();
}
private:
ListEntry m_entry;
@@ -161,17 +166,24 @@ lldb_private::formatters::LibcxxStdListSyntheticFrontEnd::HasLoop()
{
if (g_use_loop_detect == false)
return false;
+ // don't bother checking for a loop if we won't actually need to jump nodes
+ if (m_count < 2)
+ return false;
+ auto steps_left = m_count;
ListEntry slow(m_head);
- ListEntry fast1(m_head);
- ListEntry fast2(m_head);
- while (slow.next() && slow.next()->GetValueAsUnsigned(0) != m_node_address)
+ ListEntry fast(m_head);
+ while (steps_left-- > 0)
{
- auto slow_value = slow.value();
- fast1.SetEntry(fast2.next());
- fast2.SetEntry(fast1.next());
- if (fast1.value() == slow_value || fast2.value() == slow_value)
+ slow = slow.next();
+ fast = fast.next();
+ if (fast.next())
+ fast = fast.next().next();
+ else
+ fast = nullptr;
+ if (!slow || !fast)
+ return false;
+ if (slow == fast)
return true;
- slow.SetEntry(slow.next());
}
return false;
}
@@ -212,10 +224,10 @@ lldb_private::formatters::LibcxxStdListSyntheticFrontEnd::CalculateNumChildren (
return 0;
uint64_t size = 2;
ListEntry current(m_head);
- while (current.next() && current.next()->GetValueAsUnsigned(0) != m_node_address)
+ while (current.next() && current.next().value() != m_node_address)
{
size++;
- current.SetEntry(current.next());
+ current = current.next();
if (size > m_list_capping_size)
break;
}
@@ -245,9 +257,13 @@ lldb_private::formatters::LibcxxStdListSyntheticFrontEnd::GetChildAtIndex (size_
return lldb::ValueObjectSP();
// we need to copy current_sp into a new object otherwise we will end up with all items named __value_
DataExtractor data;
- current_sp->GetData(data);
+ Error error;
+ current_sp->GetData(data, error);
+ if (error.Fail())
+ return lldb::ValueObjectSP();
+
StreamString name;
- name.Printf("[%zu]",idx);
+ name.Printf("[%" PRIu64 "]", (uint64_t)idx);
return (m_children[idx] = ValueObject::CreateValueObjectFromData(name.GetData(), data, m_backend.GetExecutionContextRef(), m_element_type));
}
diff --git a/contrib/llvm/tools/lldb/source/DataFormatters/LibCxxMap.cpp b/contrib/llvm/tools/lldb/source/DataFormatters/LibCxxMap.cpp
index 5daa40f..e665f296 100644
--- a/contrib/llvm/tools/lldb/source/DataFormatters/LibCxxMap.cpp
+++ b/contrib/llvm/tools/lldb/source/DataFormatters/LibCxxMap.cpp
@@ -366,9 +366,15 @@ lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::GetChildAtIndex (size_t
// at this point we have a valid
// we need to copy current_sp into a new object otherwise we will end up with all items named __value_
DataExtractor data;
- iterated_sp->GetData(data);
+ Error error;
+ iterated_sp->GetData(data, error);
+ if (error.Fail())
+ {
+ m_tree = NULL;
+ return lldb::ValueObjectSP();
+ }
StreamString name;
- name.Printf("[%zu]",idx);
+ name.Printf("[%" PRIu64 "]", (uint64_t)idx);
return (m_children[idx] = ValueObject::CreateValueObjectFromData(name.GetData(), data, m_backend.GetExecutionContextRef(), m_element_type));
}
diff --git a/contrib/llvm/tools/lldb/source/DataFormatters/LibCxxUnorderedMap.cpp b/contrib/llvm/tools/lldb/source/DataFormatters/LibCxxUnorderedMap.cpp
index 05b41d0..bf68f20 100644
--- a/contrib/llvm/tools/lldb/source/DataFormatters/LibCxxUnorderedMap.cpp
+++ b/contrib/llvm/tools/lldb/source/DataFormatters/LibCxxUnorderedMap.cpp
@@ -81,9 +81,12 @@ lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd::GetChildAtInde
if (!val_hash.first)
return lldb::ValueObjectSP();
StreamString stream;
- stream.Printf("[%zu]",idx);
+ stream.Printf("[%" PRIu64 "]", (uint64_t)idx);
DataExtractor data;
- val_hash.first->GetData(data);
+ Error error;
+ val_hash.first->GetData(data, error);
+ if (error.Fail())
+ return lldb::ValueObjectSP();
const bool thread_and_frame_only_if_stopped = true;
ExecutionContext exe_ctx = val_hash.first->GetExecutionContextRef().Lock(thread_and_frame_only_if_stopped);
return val_hash.first->CreateValueObjectFromData(stream.GetData(),
diff --git a/contrib/llvm/tools/lldb/source/DataFormatters/LibStdcpp.cpp b/contrib/llvm/tools/lldb/source/DataFormatters/LibStdcpp.cpp
index 08e7d58..f2d6173 100644
--- a/contrib/llvm/tools/lldb/source/DataFormatters/LibStdcpp.cpp
+++ b/contrib/llvm/tools/lldb/source/DataFormatters/LibStdcpp.cpp
@@ -93,7 +93,7 @@ lldb_private::formatters::LibstdcppVectorBoolSyntheticFrontEnd::GetChildAtIndex
target.EvaluateExpression("(bool)true", NULL, retval_sp);
else
target.EvaluateExpression("(bool)false", NULL, retval_sp);
- StreamString name; name.Printf("[%zu]",idx);
+ StreamString name; name.Printf("[%" PRIu64 "]", (uint64_t)idx);
if (retval_sp)
retval_sp->SetName(ConstString(name.GetData()));
return retval_sp;
diff --git a/contrib/llvm/tools/lldb/source/DataFormatters/NSArray.cpp b/contrib/llvm/tools/lldb/source/DataFormatters/NSArray.cpp
index d8ee9bf..1663538 100644
--- a/contrib/llvm/tools/lldb/source/DataFormatters/NSArray.cpp
+++ b/contrib/llvm/tools/lldb/source/DataFormatters/NSArray.cpp
@@ -19,12 +19,214 @@
#include "lldb/Host/Endian.h"
#include "lldb/Symbol/ClangASTContext.h"
#include "lldb/Target/ObjCLanguageRuntime.h"
+#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.h"
#include "lldb/Target/Target.h"
+#include "clang/AST/ASTContext.h"
+
using namespace lldb;
using namespace lldb_private;
using namespace lldb_private::formatters;
+namespace lldb_private {
+ namespace formatters {
+ class NSArrayMSyntheticFrontEnd : public SyntheticChildrenFrontEnd
+ {
+ public:
+ NSArrayMSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp);
+
+ virtual size_t
+ CalculateNumChildren ();
+
+ virtual lldb::ValueObjectSP
+ GetChildAtIndex (size_t idx);
+
+ virtual bool
+ Update() = 0;
+
+ virtual bool
+ MightHaveChildren ();
+
+ virtual size_t
+ GetIndexOfChildWithName (const ConstString &name);
+
+ virtual
+ ~NSArrayMSyntheticFrontEnd () {}
+
+ protected:
+ virtual lldb::addr_t
+ GetDataAddress () = 0;
+
+ virtual uint64_t
+ GetUsedCount () = 0;
+
+ virtual uint64_t
+ GetOffset () = 0;
+
+ virtual uint64_t
+ GetSize () = 0;
+
+ ExecutionContextRef m_exe_ctx_ref;
+ uint8_t m_ptr_size;
+ ClangASTType m_id_type;
+ std::vector<lldb::ValueObjectSP> m_children;
+ };
+
+ class NSArrayMSyntheticFrontEnd_109 : public NSArrayMSyntheticFrontEnd
+ {
+ private:
+ struct DataDescriptor_32
+ {
+ uint32_t _used;
+ uint32_t _priv1 : 2 ;
+ uint32_t _size : 30;
+ uint32_t _priv2 : 2;
+ uint32_t _offset : 30;
+ uint32_t _priv3;
+ uint32_t _data;
+ };
+ struct DataDescriptor_64
+ {
+ uint64_t _used;
+ uint64_t _priv1 : 2 ;
+ uint64_t _size : 62;
+ uint64_t _priv2 : 2;
+ uint64_t _offset : 62;
+ uint32_t _priv3;
+ uint64_t _data;
+ };
+ public:
+ NSArrayMSyntheticFrontEnd_109 (lldb::ValueObjectSP valobj_sp);
+
+ virtual bool
+ Update();
+
+ virtual
+ ~NSArrayMSyntheticFrontEnd_109 ();
+
+ protected:
+ virtual lldb::addr_t
+ GetDataAddress ();
+
+ virtual uint64_t
+ GetUsedCount ();
+
+ virtual uint64_t
+ GetOffset ();
+
+ virtual uint64_t
+ GetSize ();
+
+ private:
+ DataDescriptor_32 *m_data_32;
+ DataDescriptor_64 *m_data_64;
+ };
+
+ class NSArrayMSyntheticFrontEnd_1010 : public NSArrayMSyntheticFrontEnd
+ {
+ private:
+ struct DataDescriptor_32
+ {
+ uint32_t _used;
+ uint32_t _offset;
+ uint32_t _size : 28;
+ uint64_t _priv1 : 4;
+ uint32_t _priv2;
+ uint32_t _data;
+ };
+ struct DataDescriptor_64
+ {
+ uint64_t _used;
+ uint64_t _offset;
+ uint64_t _size : 60;
+ uint64_t _priv1 : 4;
+ uint32_t _priv2;
+ uint64_t _data;
+ };
+ public:
+ NSArrayMSyntheticFrontEnd_1010 (lldb::ValueObjectSP valobj_sp);
+
+ virtual bool
+ Update();
+
+ virtual
+ ~NSArrayMSyntheticFrontEnd_1010 ();
+
+ protected:
+ virtual lldb::addr_t
+ GetDataAddress ();
+
+ virtual uint64_t
+ GetUsedCount ();
+
+ virtual uint64_t
+ GetOffset ();
+
+ virtual uint64_t
+ GetSize ();
+
+ private:
+ DataDescriptor_32 *m_data_32;
+ DataDescriptor_64 *m_data_64;
+ };
+
+ class NSArrayISyntheticFrontEnd : public SyntheticChildrenFrontEnd
+ {
+ public:
+ NSArrayISyntheticFrontEnd (lldb::ValueObjectSP valobj_sp);
+
+ virtual size_t
+ CalculateNumChildren ();
+
+ virtual lldb::ValueObjectSP
+ GetChildAtIndex (size_t idx);
+
+ virtual bool
+ Update();
+
+ virtual bool
+ MightHaveChildren ();
+
+ virtual size_t
+ GetIndexOfChildWithName (const ConstString &name);
+
+ virtual
+ ~NSArrayISyntheticFrontEnd ();
+ private:
+ ExecutionContextRef m_exe_ctx_ref;
+ uint8_t m_ptr_size;
+ uint64_t m_items;
+ lldb::addr_t m_data_ptr;
+ ClangASTType m_id_type;
+ std::vector<lldb::ValueObjectSP> m_children;
+ };
+
+ class NSArrayCodeRunningSyntheticFrontEnd : public SyntheticChildrenFrontEnd
+ {
+ public:
+ NSArrayCodeRunningSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp);
+
+ virtual size_t
+ CalculateNumChildren ();
+
+ virtual lldb::ValueObjectSP
+ GetChildAtIndex (size_t idx);
+
+ virtual bool
+ Update();
+
+ virtual bool
+ MightHaveChildren ();
+
+ virtual size_t
+ GetIndexOfChildWithName (const ConstString &name);
+
+ virtual
+ ~NSArrayCodeRunningSyntheticFrontEnd ();
+ };
+ }
+}
+
bool
lldb_private::formatters::NSArraySummaryProvider (ValueObject& valobj, Stream& stream)
{
@@ -90,45 +292,55 @@ lldb_private::formatters::NSArraySummaryProvider (ValueObject& valobj, Stream& s
}
lldb_private::formatters::NSArrayMSyntheticFrontEnd::NSArrayMSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) :
- SyntheticChildrenFrontEnd(*valobj_sp.get()),
+SyntheticChildrenFrontEnd(*valobj_sp),
m_exe_ctx_ref(),
m_ptr_size(8),
- m_data_32(NULL),
- m_data_64(NULL)
+m_id_type(),
+m_children()
{
if (valobj_sp)
{
- clang::ASTContext *ast = valobj_sp->GetClangType().GetASTContext();
+ clang::ASTContext *ast = valobj_sp->GetExecutionContextRef().GetTargetSP()->GetScratchClangASTContext()->getASTContext();
if (ast)
m_id_type = ClangASTType(ast, ast->ObjCBuiltinIdTy);
+ if (valobj_sp->GetProcessSP())
+ m_ptr_size = valobj_sp->GetProcessSP()->GetAddressByteSize();
}
}
+lldb_private::formatters::NSArrayMSyntheticFrontEnd_109::NSArrayMSyntheticFrontEnd_109 (lldb::ValueObjectSP valobj_sp) :
+NSArrayMSyntheticFrontEnd(valobj_sp),
+m_data_32(NULL),
+m_data_64(NULL)
+{
+}
+
+lldb_private::formatters::NSArrayMSyntheticFrontEnd_1010::NSArrayMSyntheticFrontEnd_1010 (lldb::ValueObjectSP valobj_sp) :
+NSArrayMSyntheticFrontEnd(valobj_sp),
+m_data_32(NULL),
+m_data_64(NULL)
+{
+}
+
size_t
lldb_private::formatters::NSArrayMSyntheticFrontEnd::CalculateNumChildren ()
{
- if (m_data_32)
- return m_data_32->_used;
- if (m_data_64)
- return m_data_64->_used;
- return 0;
+ return GetUsedCount();
}
lldb::ValueObjectSP
lldb_private::formatters::NSArrayMSyntheticFrontEnd::GetChildAtIndex (size_t idx)
{
- if (!m_data_32 && !m_data_64)
- return lldb::ValueObjectSP();
if (idx >= CalculateNumChildren())
return lldb::ValueObjectSP();
- lldb::addr_t object_at_idx = (m_data_32 ? m_data_32->_data : m_data_64->_data);
+ lldb::addr_t object_at_idx = GetDataAddress();
size_t pyhs_idx = idx;
- pyhs_idx += (m_data_32 ? m_data_32->offset : m_data_64->offset);
- if ((m_data_32 ? m_data_32->_size : m_data_64->_size) <= pyhs_idx)
- pyhs_idx -= (m_data_32 ? m_data_32->_size : m_data_64->_size);
+ pyhs_idx += GetOffset();
+ if (GetSize() <= pyhs_idx)
+ pyhs_idx -= GetSize();
object_at_idx += (pyhs_idx * m_ptr_size);
StreamString idx_name;
- idx_name.Printf("[%zu]",idx);
+ idx_name.Printf("[%" PRIu64 "]", (uint64_t)idx);
lldb::ValueObjectSP retval_sp = ValueObject::CreateValueObjectFromAddress(idx_name.GetData(),
object_at_idx,
m_exe_ctx_ref,
@@ -138,7 +350,42 @@ lldb_private::formatters::NSArrayMSyntheticFrontEnd::GetChildAtIndex (size_t idx
}
bool
-lldb_private::formatters::NSArrayMSyntheticFrontEnd::Update()
+lldb_private::formatters::NSArrayMSyntheticFrontEnd_109::Update()
+{
+ m_children.clear();
+ ValueObjectSP valobj_sp = m_backend.GetSP();
+ m_ptr_size = 0;
+ delete m_data_32;
+ m_data_32 = NULL;
+ delete m_data_64;
+ m_data_64 = NULL;
+ if (!valobj_sp)
+ return false;
+ m_exe_ctx_ref = valobj_sp->GetExecutionContextRef();
+ Error error;
+ error.Clear();
+ lldb::ProcessSP process_sp(valobj_sp->GetProcessSP());
+ if (!process_sp)
+ return false;
+ m_ptr_size = process_sp->GetAddressByteSize();
+ uint64_t data_location = valobj_sp->GetValueAsUnsigned(0) + m_ptr_size;
+ if (m_ptr_size == 4)
+ {
+ m_data_32 = new DataDescriptor_32();
+ process_sp->ReadMemory (data_location, m_data_32, sizeof(DataDescriptor_32), error);
+ }
+ else
+ {
+ m_data_64 = new DataDescriptor_64();
+ process_sp->ReadMemory (data_location, m_data_64, sizeof(DataDescriptor_64), error);
+ }
+ if (error.Fail())
+ return false;
+ return false;
+}
+
+bool
+lldb_private::formatters::NSArrayMSyntheticFrontEnd_1010::Update()
{
m_children.clear();
ValueObjectSP valobj_sp = m_backend.GetSP();
@@ -181,8 +428,6 @@ lldb_private::formatters::NSArrayMSyntheticFrontEnd::MightHaveChildren ()
size_t
lldb_private::formatters::NSArrayMSyntheticFrontEnd::GetIndexOfChildWithName (const ConstString &name)
{
- if (!m_data_32 && !m_data_64)
- return UINT32_MAX;
const char* item_name = name.GetCString();
uint32_t idx = ExtractIndexFromString(item_name);
if (idx < UINT32_MAX && idx >= CalculateNumChildren())
@@ -190,7 +435,87 @@ lldb_private::formatters::NSArrayMSyntheticFrontEnd::GetIndexOfChildWithName (co
return idx;
}
-lldb_private::formatters::NSArrayMSyntheticFrontEnd::~NSArrayMSyntheticFrontEnd ()
+lldb::addr_t
+lldb_private::formatters::NSArrayMSyntheticFrontEnd_109::GetDataAddress ()
+{
+ if (!m_data_32 && !m_data_64)
+ return LLDB_INVALID_ADDRESS;
+ return m_data_32 ? m_data_32->_data :
+ m_data_64->_data;
+}
+
+uint64_t
+lldb_private::formatters::NSArrayMSyntheticFrontEnd_109::GetUsedCount ()
+{
+ if (!m_data_32 && !m_data_64)
+ return 0;
+ return m_data_32 ? m_data_32->_used :
+ m_data_64->_used;
+}
+
+uint64_t
+lldb_private::formatters::NSArrayMSyntheticFrontEnd_109::GetOffset ()
+{
+ if (!m_data_32 && !m_data_64)
+ return 0;
+ return m_data_32 ? m_data_32->_offset :
+ m_data_64->_offset;
+}
+
+uint64_t
+lldb_private::formatters::NSArrayMSyntheticFrontEnd_109::GetSize ()
+{
+ if (!m_data_32 && !m_data_64)
+ return 0;
+ return m_data_32 ? m_data_32->_size :
+ m_data_64->_size;
+}
+
+lldb_private::formatters::NSArrayMSyntheticFrontEnd_109::~NSArrayMSyntheticFrontEnd_109 ()
+{
+ delete m_data_32;
+ m_data_32 = NULL;
+ delete m_data_64;
+ m_data_64 = NULL;
+}
+
+lldb::addr_t
+lldb_private::formatters::NSArrayMSyntheticFrontEnd_1010::GetDataAddress ()
+{
+ if (!m_data_32 && !m_data_64)
+ return LLDB_INVALID_ADDRESS;
+ return m_data_32 ? m_data_32->_data :
+ m_data_64->_data;
+}
+
+uint64_t
+lldb_private::formatters::NSArrayMSyntheticFrontEnd_1010::GetUsedCount ()
+{
+ if (!m_data_32 && !m_data_64)
+ return 0;
+ return m_data_32 ? m_data_32->_used :
+ m_data_64->_used;
+}
+
+uint64_t
+lldb_private::formatters::NSArrayMSyntheticFrontEnd_1010::GetOffset ()
+{
+ if (!m_data_32 && !m_data_64)
+ return 0;
+ return m_data_32 ? m_data_32->_offset :
+ m_data_64->_offset;
+}
+
+uint64_t
+lldb_private::formatters::NSArrayMSyntheticFrontEnd_1010::GetSize ()
+{
+ if (!m_data_32 && !m_data_64)
+ return 0;
+ return m_data_32 ? m_data_32->_size :
+ m_data_64->_size;
+}
+
+lldb_private::formatters::NSArrayMSyntheticFrontEnd_1010::~NSArrayMSyntheticFrontEnd_1010 ()
{
delete m_data_32;
m_data_32 = NULL;
@@ -278,7 +603,7 @@ lldb_private::formatters::NSArrayISyntheticFrontEnd::GetChildAtIndex (size_t idx
if (error.Fail())
return lldb::ValueObjectSP();
StreamString idx_name;
- idx_name.Printf("[%zu]",idx);
+ idx_name.Printf("[%" PRIu64 "]", (uint64_t)idx);
lldb::ValueObjectSP retval_sp = ValueObject::CreateValueObjectFromAddress(idx_name.GetData(), object_at_idx, m_exe_ctx_ref, m_id_type);
m_children.push_back(retval_sp);
return retval_sp;
@@ -286,14 +611,20 @@ lldb_private::formatters::NSArrayISyntheticFrontEnd::GetChildAtIndex (size_t idx
SyntheticChildrenFrontEnd* lldb_private::formatters::NSArraySyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP valobj_sp)
{
+ if (!valobj_sp)
+ return nullptr;
+
lldb::ProcessSP process_sp (valobj_sp->GetProcessSP());
if (!process_sp)
return NULL;
- ObjCLanguageRuntime *runtime = (ObjCLanguageRuntime*)process_sp->GetLanguageRuntime(lldb::eLanguageTypeObjC);
+ AppleObjCRuntime *runtime = (AppleObjCRuntime*)process_sp->GetLanguageRuntime(lldb::eLanguageTypeObjC);
if (!runtime)
return NULL;
- if (!valobj_sp->IsPointerType())
+ ClangASTType valobj_type(valobj_sp->GetClangType());
+ Flags flags(valobj_type.GetTypeInfo());
+
+ if (flags.IsClear(ClangASTType::eTypeIsPointer))
{
Error error;
valobj_sp = valobj_sp->AddressOf(error);
@@ -317,7 +648,10 @@ SyntheticChildrenFrontEnd* lldb_private::formatters::NSArraySyntheticFrontEndCre
}
else if (!strcmp(class_name,"__NSArrayM"))
{
- return (new NSArrayMSyntheticFrontEnd(valobj_sp));
+ if (runtime->GetFoundationVersion() >= 1100)
+ return (new NSArrayMSyntheticFrontEnd_1010(valobj_sp));
+ else
+ return (new NSArrayMSyntheticFrontEnd_109(valobj_sp));
}
else
{
@@ -342,7 +676,7 @@ lldb::ValueObjectSP
lldb_private::formatters::NSArrayCodeRunningSyntheticFrontEnd::GetChildAtIndex (size_t idx)
{
StreamString idx_name;
- idx_name.Printf("[%zu]",idx);
+ idx_name.Printf("[%" PRIu64 "]", (uint64_t)idx);
lldb::ValueObjectSP valobj_sp = CallSelectorOnObject(m_backend,"id","objectAtIndex:",idx);
if (valobj_sp)
valobj_sp->SetName(ConstString(idx_name.GetData()));
diff --git a/contrib/llvm/tools/lldb/source/DataFormatters/NSDictionary.cpp b/contrib/llvm/tools/lldb/source/DataFormatters/NSDictionary.cpp
index f53004d..ddd1e2e 100644
--- a/contrib/llvm/tools/lldb/source/DataFormatters/NSDictionary.cpp
+++ b/contrib/llvm/tools/lldb/source/DataFormatters/NSDictionary.cpp
@@ -210,9 +210,9 @@ lldb::ValueObjectSP
lldb_private::formatters::NSDictionaryCodeRunningSyntheticFrontEnd::GetChildAtIndex (size_t idx)
{
StreamString idx_name;
- idx_name.Printf("[%zu]",idx);
+ idx_name.Printf("[%" PRIu64 "]", (uint64_t)idx);
StreamString key_fetcher_expr;
- key_fetcher_expr.Printf("(id)[(NSArray*)[(id)0x%" PRIx64 " allKeys] objectAtIndex:%zu]",m_backend.GetPointerValue(),idx);
+ key_fetcher_expr.Printf("(id)[(NSArray*)[(id)0x%" PRIx64 " allKeys] objectAtIndex:%" PRIu64 "]", m_backend.GetPointerValue(), (uint64_t)idx);
StreamString value_fetcher_expr;
value_fetcher_expr.Printf("(id)[(id)0x%" PRIx64 " objectForKey:(%s)]",m_backend.GetPointerValue(),key_fetcher_expr.GetData());
StreamString object_fetcher_expr;
@@ -220,7 +220,9 @@ lldb_private::formatters::NSDictionaryCodeRunningSyntheticFrontEnd::GetChildAtIn
lldb::ValueObjectSP child_sp;
EvaluateExpressionOptions options;
options.SetKeepInMemory(true);
- m_backend.GetTargetSP()->EvaluateExpression(object_fetcher_expr.GetData(), m_backend.GetFrameSP().get(), child_sp,
+ m_backend.GetTargetSP()->EvaluateExpression(object_fetcher_expr.GetData(),
+ GetViableFrame(m_backend.GetTargetSP().get()),
+ child_sp,
options);
if (child_sp)
child_sp->SetName(ConstString(idx_name.GetData()));
@@ -403,7 +405,7 @@ lldb_private::formatters::NSDictionaryISyntheticFrontEnd::GetChildAtIndex (size_
}
StreamString idx_name;
- idx_name.Printf("[%zu]",idx);
+ idx_name.Printf("[%" PRIu64 "]", (uint64_t)idx);
DataExtractor data(buffer_sp, m_order, m_ptr_size);
dict_item.valobj_sp = ValueObject::CreateValueObjectFromData(idx_name.GetData(), data, m_exe_ctx_ref, m_pair_type);
}
@@ -567,7 +569,7 @@ lldb_private::formatters::NSDictionaryMSyntheticFrontEnd::GetChildAtIndex (size_
}
StreamString idx_name;
- idx_name.Printf("[%zu]",idx);
+ idx_name.Printf("[%" PRIu64 "]", (uint64_t)idx);
DataExtractor data(buffer_sp, m_order, m_ptr_size);
dict_item.valobj_sp = ValueObject::CreateValueObjectFromData(idx_name.GetData(), data, m_exe_ctx_ref, m_pair_type);
}
diff --git a/contrib/llvm/tools/lldb/source/DataFormatters/NSSet.cpp b/contrib/llvm/tools/lldb/source/DataFormatters/NSSet.cpp
index e6fe2a3..3c7c003 100644
--- a/contrib/llvm/tools/lldb/source/DataFormatters/NSSet.cpp
+++ b/contrib/llvm/tools/lldb/source/DataFormatters/NSSet.cpp
@@ -305,7 +305,7 @@ lldb_private::formatters::NSSetISyntheticFrontEnd::GetChildAtIndex (size_t idx)
assert(false && "pointer size is not 4 nor 8 - get out of here ASAP");
}
StreamString idx_name;
- idx_name.Printf("[%zu]",idx);
+ idx_name.Printf("[%" PRIu64 "]", (uint64_t)idx);
DataExtractor data(buffer.GetBytes(),
buffer.GetByteSize(),
@@ -473,7 +473,7 @@ lldb_private::formatters::NSSetMSyntheticFrontEnd::GetChildAtIndex (size_t idx)
assert(false && "pointer size is not 4 nor 8 - get out of here ASAP");
}
StreamString idx_name;
- idx_name.Printf("[%zu]",idx);
+ idx_name.Printf("[%" PRIu64 "]", (uint64_t)idx);
DataExtractor data(buffer.GetBytes(),
buffer.GetByteSize(),
@@ -519,7 +519,7 @@ lldb_private::formatters::NSOrderedSetSyntheticFrontEnd::GetChildAtIndex (size_t
if (retval_sp)
{
StreamString idx_name;
- idx_name.Printf("[%zu]",idx);
+ idx_name.Printf("[%" PRIu64 "]", (uint64_t)idx);
retval_sp->SetName(ConstString(idx_name.GetData()));
}
m_children[idx] = retval_sp;
diff --git a/contrib/llvm/tools/lldb/source/DataFormatters/TypeFormat.cpp b/contrib/llvm/tools/lldb/source/DataFormatters/TypeFormat.cpp
index a72f551..0c62daf 100644
--- a/contrib/llvm/tools/lldb/source/DataFormatters/TypeFormat.cpp
+++ b/contrib/llvm/tools/lldb/source/DataFormatters/TypeFormat.cpp
@@ -38,6 +38,9 @@ m_my_revision(0)
{
}
+TypeFormatImpl::~TypeFormatImpl ()
+{
+}
TypeFormatImpl_Format::TypeFormatImpl_Format (lldb::Format f,
const TypeFormatImpl::Flags& flags) :
@@ -46,6 +49,10 @@ m_format (f)
{
}
+TypeFormatImpl_Format::~TypeFormatImpl_Format ()
+{
+}
+
bool
TypeFormatImpl_Format::FormatObject (ValueObject *valobj,
std::string& dest) const
@@ -64,7 +71,10 @@ TypeFormatImpl_Format::FormatObject (ValueObject *valobj,
const RegisterInfo *reg_info = value.GetRegisterInfo();
if (reg_info)
{
- valobj->GetData(data);
+ Error error;
+ valobj->GetData(data, error);
+ if (error.Fail())
+ return false;
StreamString reg_sstr;
data.Dump (&reg_sstr,
@@ -105,7 +115,12 @@ TypeFormatImpl_Format::FormatObject (ValueObject *valobj,
}
}
else
- valobj->GetData(data);
+ {
+ Error error;
+ valobj->GetData(data, error);
+ if (error.Fail())
+ return false;
+ }
StreamString sstr;
clang_type.DumpTypeValue (&sstr, // The stream to use for display
@@ -154,6 +169,10 @@ m_types()
{
}
+TypeFormatImpl_EnumType::~TypeFormatImpl_EnumType ()
+{
+}
+
bool
TypeFormatImpl_EnumType::FormatObject (ValueObject *valobj,
std::string& dest) const
@@ -203,7 +222,10 @@ TypeFormatImpl_EnumType::FormatObject (ValueObject *valobj,
if (valobj_enum_type.IsValid() == false)
return false;
DataExtractor data;
- valobj->GetData(data);
+ Error error;
+ valobj->GetData(data, error);
+ if (error.Fail())
+ return false;
ExecutionContext exe_ctx (valobj->GetExecutionContextRef());
StreamString sstr;
valobj_enum_type.DumpTypeValue(&sstr,
diff --git a/contrib/llvm/tools/lldb/source/DataFormatters/TypeSummary.cpp b/contrib/llvm/tools/lldb/source/DataFormatters/TypeSummary.cpp
index 4c75b4b..e5d8017 100644
--- a/contrib/llvm/tools/lldb/source/DataFormatters/TypeSummary.cpp
+++ b/contrib/llvm/tools/lldb/source/DataFormatters/TypeSummary.cpp
@@ -69,7 +69,7 @@ StringSummaryFormat::FormatObject (ValueObject *valobj,
if (IsOneLiner())
{
ValueObjectPrinter printer(valobj,&s,DumpValueObjectOptions());
- printer.PrintChildrenOneLiner(HideNames());
+ printer.PrintChildrenOneLiner(HideNames(valobj));
retval.assign(s.GetData());
return true;
}
@@ -95,12 +95,12 @@ StringSummaryFormat::GetDescription ()
sstr.Printf ("`%s`%s%s%s%s%s%s%s", m_format.c_str(),
Cascades() ? "" : " (not cascading)",
- !DoesPrintChildren() ? "" : " (show children)",
- !DoesPrintValue() ? " (hide value)" : "",
+ !DoesPrintChildren(nullptr) ? "" : " (show children)",
+ !DoesPrintValue(nullptr) ? " (hide value)" : "",
IsOneLiner() ? " (one-line printout)" : "",
SkipsPointers() ? " (skip pointers)" : "",
SkipsReferences() ? " (skip references)" : "",
- HideNames() ? " (hide member names)" : "");
+ HideNames(nullptr) ? " (hide member names)" : "");
return sstr.GetString();
}
@@ -129,14 +129,15 @@ std::string
CXXFunctionSummaryFormat::GetDescription ()
{
StreamString sstr;
- sstr.Printf ("`%s (%p) `%s%s%s%s%s%s%s", m_description.c_str(),m_impl,
+ sstr.Printf ("`%s (%p) `%s%s%s%s%s%s%s", m_description.c_str(),
+ static_cast<void*>(&m_impl),
Cascades() ? "" : " (not cascading)",
- !DoesPrintChildren() ? "" : " (show children)",
- !DoesPrintValue() ? " (hide value)" : "",
+ !DoesPrintChildren(nullptr) ? "" : " (show children)",
+ !DoesPrintValue(nullptr) ? " (hide value)" : "",
IsOneLiner() ? " (one-line printout)" : "",
SkipsPointers() ? " (skip pointers)" : "",
SkipsReferences() ? " (skip references)" : "",
- HideNames() ? " (hide member names)" : "");
+ HideNames(nullptr) ? " (hide member names)" : "");
return sstr.GetString();
}
@@ -198,12 +199,12 @@ ScriptSummaryFormat::GetDescription ()
{
StreamString sstr;
sstr.Printf ("%s%s%s%s%s%s%s\n%s", Cascades() ? "" : " (not cascading)",
- !DoesPrintChildren() ? "" : " (show children)",
- !DoesPrintValue() ? " (hide value)" : "",
+ !DoesPrintChildren(nullptr) ? "" : " (show children)",
+ !DoesPrintValue(nullptr) ? " (hide value)" : "",
IsOneLiner() ? " (one-line printout)" : "",
SkipsPointers() ? " (skip pointers)" : "",
SkipsReferences() ? " (skip references)" : "",
- HideNames() ? " (hide member names)" : "",
+ HideNames(nullptr) ? " (hide member names)" : "",
m_python_script.c_str());
return sstr.GetString();
diff --git a/contrib/llvm/tools/lldb/source/DataFormatters/TypeSynthetic.cpp b/contrib/llvm/tools/lldb/source/DataFormatters/TypeSynthetic.cpp
index 972be48..3949673 100644
--- a/contrib/llvm/tools/lldb/source/DataFormatters/TypeSynthetic.cpp
+++ b/contrib/llvm/tools/lldb/source/DataFormatters/TypeSynthetic.cpp
@@ -57,9 +57,9 @@ CXXSyntheticChildren::GetDescription()
Cascades() ? "" : " (not cascading)",
SkipsPointers() ? " (skip pointers)" : "",
SkipsReferences() ? " (skip references)" : "",
- m_create_callback,
+ reinterpret_cast<void*>(reinterpret_cast<intptr_t>(m_create_callback)),
m_description.c_str());
-
+
return sstr.GetString();
}
diff --git a/contrib/llvm/tools/lldb/source/DataFormatters/ValueObjectPrinter.cpp b/contrib/llvm/tools/lldb/source/DataFormatters/ValueObjectPrinter.cpp
index 944d6d2..65e5e3f 100644
--- a/contrib/llvm/tools/lldb/source/DataFormatters/ValueObjectPrinter.cpp
+++ b/contrib/llvm/tools/lldb/source/DataFormatters/ValueObjectPrinter.cpp
@@ -222,7 +222,11 @@ ValueObjectPrinter::PrintTypeIfNeeded ()
{
// Some ValueObjects don't have types (like registers sets). Only print
// the type if there is one to print
- ConstString qualified_type_name(m_valobj->GetQualifiedTypeName());
+ ConstString qualified_type_name;
+ if (options.m_be_raw)
+ qualified_type_name = m_valobj->GetQualifiedTypeName();
+ else
+ qualified_type_name = m_valobj->GetDisplayTypeName();
if (qualified_type_name)
m_stream->Printf("(%s) ", qualified_type_name.GetCString());
else
@@ -341,7 +345,7 @@ ValueObjectPrinter::PrintValueAndSummaryIfNeeded (bool& value_printed,
// the value if this thing is nil
// (but show the value if the user passes a format explicitly)
TypeSummaryImpl* entry = GetSummaryFormatter();
- if (!IsNil() && !m_value.empty() && (entry == NULL || (entry->DoesPrintValue() || options.m_format != eFormatDefault) || m_summary.empty()) && !options.m_hide_value)
+ if (!IsNil() && !m_value.empty() && (entry == NULL || (entry->DoesPrintValue(m_valobj) || options.m_format != eFormatDefault) || m_summary.empty()) && !options.m_hide_value)
{
m_stream->Printf(" %s", m_value.c_str());
value_printed = true;
@@ -426,7 +430,7 @@ ValueObjectPrinter::ShouldPrintChildren (bool is_failed_description,
TypeSummaryImpl* entry = GetSummaryFormatter();
- return (!entry || entry->DoesPrintChildren() || m_summary.empty());
+ return (!entry || entry->DoesPrintChildren(m_valobj) || m_summary.empty());
}
return false;
}
OpenPOWER on IntegriCloud