summaryrefslogtreecommitdiffstats
path: root/lldb/source/Core/ValueObjectDynamicValue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Core/ValueObjectDynamicValue.cpp')
-rw-r--r--lldb/source/Core/ValueObjectDynamicValue.cpp25
1 files changed, 13 insertions, 12 deletions
diff --git a/lldb/source/Core/ValueObjectDynamicValue.cpp b/lldb/source/Core/ValueObjectDynamicValue.cpp
index 2921e9d1bf9..dfddbd97c95 100644
--- a/lldb/source/Core/ValueObjectDynamicValue.cpp
+++ b/lldb/source/Core/ValueObjectDynamicValue.cpp
@@ -290,29 +290,24 @@ ValueObjectDynamicValue::UpdateValue ()
lldb::LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_TYPES));
+ bool has_changed_type = false;
+
if (!m_type_sp)
{
m_type_sp = dynamic_type_sp;
- ResetCompleteTypeInfo ();
- if (log)
- log->Printf("[%s %p] now has a dynamic type %s",
- GetName().GetCString(),
- this,
- GetTypeName().AsCString(""));
+ has_changed_type = true;
}
else if (dynamic_type_sp != m_type_sp)
{
// We are another type, we need to tear down our children...
m_type_sp = dynamic_type_sp;
SetValueDidChange (true);
- ResetCompleteTypeInfo ();
- if (log)
- log->Printf("[%s %p] has a new dynamic type %s",
- GetName().GetCString(),
- this,
- GetTypeName().AsCString(""));
+ has_changed_type = true;
}
+ if (has_changed_type)
+ ClearDynamicTypeInformation ();
+
if (!m_address.IsValid() || m_address != dynamic_address)
{
if (m_address.IsValid())
@@ -341,6 +336,12 @@ ValueObjectDynamicValue::UpdateValue ()
// because we aren't pointing to the LOCATION that stores the pointer to us, we're pointing to us...
m_value.SetValueType(Value::eValueTypeScalar);
+ if (has_changed_type && log)
+ log->Printf("[%s %p] has a new dynamic type %s",
+ GetName().GetCString(),
+ this,
+ GetTypeName().GetCString());
+
if (m_address.IsValid() && m_type_sp)
{
// The variable value is in the Scalar value inside the m_value.
OpenPOWER on IntegriCloud