summaryrefslogtreecommitdiff
path: root/lldb/source/DataFormatters/DataVisualization.cpp
diff options
context:
space:
mode:
authorJorge Gorbe Moya <jgorbe@google.com>2022-10-11 00:44:06 -0700
committerJorge Gorbe Moya <jgorbe@google.com>2022-10-19 12:53:38 -0700
commitd76566417e592cfac9c710f82575473b1b4a9285 (patch)
tree0dba28904c3700ccfad579cb02f3b2c23dc8dded /lldb/source/DataFormatters/DataVisualization.cpp
parentb8b740c834ae39691b3247b30d30f00cae2b9e10 (diff)
[lldb] Add matching based on Python callbacks for data formatters.
This patch adds a new matching method for data formatters, in addition to the existing exact typename and regex-based matching. The new method allows users to specify the name of a Python callback function that takes a `SBType` object and decides whether the type is a match or not. Here is an overview of the changes performed: - Add a new `eFormatterMatchCallback` matching type, and logic to handle it in `TypeMatcher` and `SBTypeNameSpecifier`. - Extend `FormattersMatchCandidate` instances with a pointer to the current `ScriptInterpreter` and the `TypeImpl` corresponding to the candidate type, so we can run registered callbacks and pass the type to them. All matcher search functions now receive a `FormattersMatchCandidate` instead of a type name. - Add some glue code to ScriptInterpreterPython and the SWIG bindings to allow calling a formatter matching callback. Most of this code is modeled after the equivalent code for watchpoint callback functions. - Add an API test for the new callback-based matching feature. For more context, please check the RFC thread where this feature was originally discussed: https://discourse.llvm.org/t/rfc-python-callback-for-data-formatters-type-matching/64204/11 Differential Revision: https://reviews.llvm.org/D135648
Diffstat (limited to 'lldb/source/DataFormatters/DataVisualization.cpp')
-rw-r--r--lldb/source/DataFormatters/DataVisualization.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/lldb/source/DataFormatters/DataVisualization.cpp b/lldb/source/DataFormatters/DataVisualization.cpp
index 53832492aa25..036c9372baf8 100644
--- a/lldb/source/DataFormatters/DataVisualization.cpp
+++ b/lldb/source/DataFormatters/DataVisualization.cpp
@@ -66,10 +66,11 @@ DataVisualization::GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp) {
}
bool DataVisualization::AnyMatches(
- ConstString type_name, TypeCategoryImpl::FormatCategoryItems items,
- bool only_enabled, const char **matching_category,
+ const FormattersMatchCandidate &candidate_type,
+ TypeCategoryImpl::FormatCategoryItems items, bool only_enabled,
+ const char **matching_category,
TypeCategoryImpl::FormatCategoryItems *matching_type) {
- return GetFormatManager().AnyMatches(type_name, items, only_enabled,
+ return GetFormatManager().AnyMatches(candidate_type, items, only_enabled,
matching_category, matching_type);
}