diff options
author | Enrico Granata <egranata@apple.com> | 2013-10-22 22:42:14 +0000 |
---|---|---|
committer | Enrico Granata <egranata@apple.com> | 2013-10-22 22:42:14 +0000 |
commit | 106260c5746ab00e12ef3df483c438484279d5f4 (patch) | |
tree | 904e60afa32772994b1c47b9f27b55eae778de20 /lldb/source/DataFormatters/ValueObjectPrinter.cpp | |
parent | 3ac84e6ae878a82efe35829613d805fcd7efa3ed (diff) | |
download | bcm5719-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.cpp | 37 |
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; |