summaryrefslogtreecommitdiffstats
path: root/lldb/source/Core/ValueObject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Core/ValueObject.cpp')
-rw-r--r--lldb/source/Core/ValueObject.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/lldb/source/Core/ValueObject.cpp b/lldb/source/Core/ValueObject.cpp
index 0edc8be5ef0..b5b55c9e24b 100644
--- a/lldb/source/Core/ValueObject.cpp
+++ b/lldb/source/Core/ValueObject.cpp
@@ -276,10 +276,14 @@ ValueObject::SetNeedsUpdate ()
}
void
-ValueObject::ResetCompleteTypeInfo ()
+ValueObject::ClearDynamicTypeInformation ()
{
m_did_calculate_complete_objc_class_type = false;
+ m_last_format_mgr_revision = 0;
m_override_type = ClangASTType();
+ SetValueFormat(lldb::TypeFormatImplSP());
+ SetSummaryFormat(lldb::TypeSummaryImplSP());
+ SetSyntheticChildren(lldb::SyntheticChildrenSP());
}
ClangASTType
@@ -2059,12 +2063,17 @@ ValueObject::CalculateSyntheticValue (bool use_synthetic)
return;
}
+ lldb::SyntheticChildrenSP current_synth_sp(m_synthetic_children_sp);
+
if (!UpdateFormatsIfNeeded(m_last_format_mgr_dynamic) && m_synthetic_value)
return;
if (m_synthetic_children_sp.get() == NULL)
return;
+ if (current_synth_sp == m_synthetic_children_sp && m_synthetic_value)
+ return;
+
m_synthetic_value = new ValueObjectSynthetic(*this, m_synthetic_children_sp);
}
@@ -2079,7 +2088,10 @@ ValueObject::CalculateDynamicValue (DynamicValueType use_dynamic)
ExecutionContext exe_ctx (GetExecutionContextRef());
Process *process = exe_ctx.GetProcessPtr();
if (process && process->IsPossibleDynamicValue(*this))
+ {
+ ClearDynamicTypeInformation ();
m_dynamic_value = new ValueObjectDynamicValue (*this, use_dynamic);
+ }
}
}
OpenPOWER on IntegriCloud