summaryrefslogtreecommitdiffstats
path: root/lldb/source/DataFormatters/FormatManager.cpp
diff options
context:
space:
mode:
authorEnrico Granata <egranata@apple.com>2015-10-20 00:13:19 +0000
committerEnrico Granata <egranata@apple.com>2015-10-20 00:13:19 +0000
commitb3f0c3400fa07697f67dafa2ff4720e8668d47be (patch)
treebf250f91c51f9cb6fd05a87e848939ba02364254 /lldb/source/DataFormatters/FormatManager.cpp
parent19d951874a569b6af0676c14462eaecb663c980f (diff)
downloadbcm5719-llvm-b3f0c3400fa07697f67dafa2ff4720e8668d47be.tar.gz
bcm5719-llvm-b3f0c3400fa07697f67dafa2ff4720e8668d47be.zip
Introduce the concept of a type that is meaningless without dynamic resolution, which are essentially placeholder types meant to appease a language's type system but do not offer any actual information to the debugger, unless further resolved
This is currently meant for data formatters to know to ignore such types in caching and lookup llvm-svn: 250767
Diffstat (limited to 'lldb/source/DataFormatters/FormatManager.cpp')
-rw-r--r--lldb/source/DataFormatters/FormatManager.cpp30
1 files changed, 12 insertions, 18 deletions
diff --git a/lldb/source/DataFormatters/FormatManager.cpp b/lldb/source/DataFormatters/FormatManager.cpp
index e41d5eecb32..12e8ef43bfd 100644
--- a/lldb/source/DataFormatters/FormatManager.cpp
+++ b/lldb/source/DataFormatters/FormatManager.cpp
@@ -210,11 +210,15 @@ FormatManager::GetPossibleMatches (ValueObject& valobj,
entries.push_back({bitfieldname,0,did_strip_ptr,did_strip_ref,did_strip_typedef});
reason |= lldb_private::eFormatterChoiceCriterionStrippedBitField;
}
- entries.push_back({type_name,reason,did_strip_ptr,did_strip_ref,did_strip_typedef});
- ConstString display_type_name(compiler_type.GetDisplayTypeName());
- if (display_type_name != type_name)
- entries.push_back({display_type_name,reason,did_strip_ptr,did_strip_ref,did_strip_typedef});
+ if (!compiler_type.IsMeaninglessWithoutDynamicResolution())
+ {
+ entries.push_back({type_name,reason,did_strip_ptr,did_strip_ref,did_strip_typedef});
+
+ ConstString display_type_name(compiler_type.GetDisplayTypeName());
+ if (display_type_name != type_name)
+ entries.push_back({display_type_name,reason,did_strip_ptr,did_strip_ref,did_strip_typedef});
+ }
for (bool is_rvalue_ref = true, j = true; j && compiler_type.IsReferenceType(nullptr, &is_rvalue_ref); j = false)
{
@@ -641,22 +645,12 @@ ConstString
FormatManager::GetTypeForCache (ValueObject& valobj,
lldb::DynamicValueType use_dynamic)
{
- if (use_dynamic == lldb::eNoDynamicValues)
+ ValueObjectSP valobj_sp = valobj.GetQualifiedRepresentationIfAvailable(use_dynamic, valobj.IsSynthetic());
+ if (valobj_sp && valobj_sp->GetCompilerType().IsValid())
{
- if (valobj.IsDynamic())
- {
- if (valobj.GetStaticValue())
- return valobj.GetStaticValue()->GetQualifiedTypeName();
- else
- return ConstString();
- }
- else
- return valobj.GetQualifiedTypeName();
+ if (!valobj_sp->GetCompilerType().IsMeaninglessWithoutDynamicResolution())
+ return valobj_sp->GetQualifiedTypeName();
}
- if (valobj.IsDynamic())
- return valobj.GetQualifiedTypeName();
- if (valobj.GetDynamicValue(use_dynamic))
- return valobj.GetDynamicValue(use_dynamic)->GetQualifiedTypeName();
return ConstString();
}
OpenPOWER on IntegriCloud