From 106260c5746ab00e12ef3df483c438484279d5f4 Mon Sep 17 00:00:00 2001 From: Enrico Granata Date: Tue, 22 Oct 2013 22:42:14 +0000 Subject: Improvements to the ValueObjectPrinter to behave correctly in more dynamic value cases llvm-svn: 193204 --- lldb/source/DataFormatters/ValueObjectPrinter.cpp | 37 ++++++++++++++++++----- 1 file changed, 29 insertions(+), 8 deletions(-) (limited to 'lldb/source/DataFormatters/ValueObjectPrinter.cpp') diff --git a/lldb/source/DataFormatters/ValueObjectPrinter.cpp b/lldb/source/DataFormatters/ValueObjectPrinter.cpp index fd53a341592..93d7a05e481 100644 --- a/lldb/source/DataFormatters/ValueObjectPrinter.cpp +++ b/lldb/source/DataFormatters/ValueObjectPrinter.cpp @@ -99,17 +99,38 @@ ValueObjectPrinter::GetDynamicValueIfNeeded () return true; bool update_success = m_orig_valobj->UpdateValueIfNeeded (true); if (!update_success) - return false; - if (options.m_use_dynamic != eNoDynamicValues) { - ValueObject *dynamic_value = m_orig_valobj->GetDynamicValue(options.m_use_dynamic).get(); - if (dynamic_value) - m_valobj = dynamic_value; - else - m_valobj = m_orig_valobj; + m_valobj = m_orig_valobj; } else - m_valobj = m_orig_valobj; + { + if (m_orig_valobj->IsDynamic()) + { + if (options.m_use_dynamic == eNoDynamicValues) + { + ValueObject *static_value = m_orig_valobj->GetStaticValue().get(); + if (static_value) + m_valobj = static_value; + else + m_valobj = m_orig_valobj; + } + else + m_valobj = m_orig_valobj; + } + else + { + if (options.m_use_dynamic != eNoDynamicValues) + { + ValueObject *dynamic_value = m_orig_valobj->GetDynamicValue(options.m_use_dynamic).get(); + if (dynamic_value) + m_valobj = dynamic_value; + else + m_valobj = m_orig_valobj; + } + else + m_valobj = m_orig_valobj; + } + } m_clang_type = m_valobj->GetClangType(); m_type_flags = m_clang_type.GetTypeInfo (); return true; -- cgit v1.2.3