aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/DataFormatters/FormatManager.cpp
diff options
context:
space:
mode:
authorEnrico Granata <egranata@apple.com>2015-09-09 01:10:46 +0000
committerEnrico Granata <egranata@apple.com>2015-09-09 01:10:46 +0000
commitd3233c1ed78fca9640cbfa145c19fe073c63eab3 (patch)
tree5ca32c49fe4bd1d925d8f227e8ae1884c679c6e1 /lldb/source/DataFormatters/FormatManager.cpp
parent1ef6e4c870fcd434846423ea0019e1d2007aa494 (diff)
downloadllvm-d3233c1ed78fca9640cbfa145c19fe073c63eab3.zip
llvm-d3233c1ed78fca9640cbfa145c19fe073c63eab3.tar.gz
llvm-d3233c1ed78fca9640cbfa145c19fe073c63eab3.tar.bz2
Data formatter candidate matches can be generated in a number of ways; language-based dynamic type discovery being one of them (for instance, this is what takes an 'id' and discovers that it truly is an __NSArrayI, so it should probably use the NSArray formatter)
This used to be hardcoded in the FormatManager, but in a pluginized world that is not the right way to go So, move this step to the Language plugin such that appropriate language plugins for a type get a say about adding candidates to the formatters lookup tables llvm-svn: 247112
Diffstat (limited to 'lldb/source/DataFormatters/FormatManager.cpp')
-rw-r--r--lldb/source/DataFormatters/FormatManager.cpp43
1 files changed, 12 insertions, 31 deletions
diff --git a/lldb/source/DataFormatters/FormatManager.cpp b/lldb/source/DataFormatters/FormatManager.cpp
index 65b1753..bc8e8e7 100644
--- a/lldb/source/DataFormatters/FormatManager.cpp
+++ b/lldb/source/DataFormatters/FormatManager.cpp
@@ -270,41 +270,22 @@ FormatManager::GetPossibleMatches (ValueObject& valobj,
true); // this is not exactly the usual meaning of stripping typedefs
}
}
- bool canBeObjCDynamic = clang_type.IsPossibleDynamicType (NULL,
- false, // no C
- true); // yes ObjC
- if (canBeObjCDynamic)
+ for (lldb::LanguageType language_type : GetCandidateLanguages(valobj))
{
- if (use_dynamic != lldb::eNoDynamicValues)
+ if (Language* language = Language::FindPlugin(language_type))
{
- do
+ for (ConstString candidate : language->GetPossibleFormattersMatches(valobj, use_dynamic))
{
- lldb::ProcessSP process_sp = valobj.GetProcessSP();
- if (!process_sp)
- break;
- ObjCLanguageRuntime* runtime = process_sp->GetObjCLanguageRuntime();
- if (runtime == nullptr)
- break;
- ObjCLanguageRuntime::ClassDescriptorSP objc_class_sp (runtime->GetClassDescriptor(valobj));
- if (!objc_class_sp)
- break;
- ConstString name (objc_class_sp->GetClassName());
- entries.push_back({name,reason | lldb_private::eFormatterChoiceCriterionDynamicObjCDiscovery,did_strip_ptr,did_strip_ref,did_strip_typedef});
- } while (false);
+ entries.push_back({candidate,
+ reason | lldb_private::eFormatterChoiceCriterionLanguagePlugin,
+ did_strip_ptr,
+ did_strip_ref,
+ did_strip_typedef});
+ }
}
-
- CompilerType non_ptr_type = clang_type.GetPointeeType();
- GetPossibleMatches(valobj,
- non_ptr_type,
- reason | lldb_private::eFormatterChoiceCriterionStrippedPointerReference,
- use_dynamic,
- entries,
- true,
- did_strip_ref,
- did_strip_typedef);
}
-
+
// try to strip typedef chains
if (clang_type.IsTypedefType())
{
@@ -666,8 +647,8 @@ FormatManager::GetTypeForCache (ValueObject& valobj,
return ConstString();
}
-static std::vector<lldb::LanguageType>
-GetCandidateLanguages (ValueObject& valobj)
+std::vector<lldb::LanguageType>
+FormatManager::GetCandidateLanguages (ValueObject& valobj)
{
lldb::LanguageType lang_type = valobj.GetObjectRuntimeLanguage();
switch (lang_type)