summaryrefslogtreecommitdiffstats
path: root/lldb/source/DataFormatters/ValueObjectPrinter.cpp
diff options
context:
space:
mode:
authorEnrico Granata <egranata@apple.com>2013-10-22 22:42:14 +0000
committerEnrico Granata <egranata@apple.com>2013-10-22 22:42:14 +0000
commit106260c5746ab00e12ef3df483c438484279d5f4 (patch)
tree904e60afa32772994b1c47b9f27b55eae778de20 /lldb/source/DataFormatters/ValueObjectPrinter.cpp
parent3ac84e6ae878a82efe35829613d805fcd7efa3ed (diff)
downloadbcm5719-llvm-106260c5746ab00e12ef3df483c438484279d5f4.tar.gz
bcm5719-llvm-106260c5746ab00e12ef3df483c438484279d5f4.zip
Improvements to the ValueObjectPrinter to behave correctly in more dynamic value cases
llvm-svn: 193204
Diffstat (limited to 'lldb/source/DataFormatters/ValueObjectPrinter.cpp')
-rw-r--r--lldb/source/DataFormatters/ValueObjectPrinter.cpp37
1 files changed, 29 insertions, 8 deletions
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;
OpenPOWER on IntegriCloud