diff --git a/lldb/source/Commands/CommandObjectType.cpp b/lldb/source/Commands/CommandObjectType.cpp --- a/lldb/source/Commands/CommandObjectType.cpp +++ b/lldb/source/Commands/CommandObjectType.cpp @@ -1055,6 +1055,15 @@ return false; } + static bool ShouldListItem(llvm::StringRef s, RegularExpression *regex) { + // If we have a regex, it can match two kinds of results: + // - An item created with that same regex string (exact string match), so + // the user can list it using the same string it used at creation time. + // - Items that match the regex. + // No regex means list everything. + return regex == nullptr || s == regex->GetText() || regex->Execute(s); + } + bool DoExecute(Args &command, CommandReturnObject &result) override { const size_t argc = command.GetArgumentCount(); @@ -1096,24 +1105,13 @@ .SetExact([&result, &formatter_regex, &any_printed]( const TypeMatcher &type_matcher, const FormatterSharedPointer &format_sp) -> bool { - if (formatter_regex) { - bool escape = true; - if (type_matcher.CreatedBySameMatchString( - ConstString(formatter_regex->GetText()))) { - escape = false; - } else if (formatter_regex->Execute( - type_matcher.GetMatchString().GetStringRef())) { - escape = false; - } - - if (escape) - return true; + if (ShouldListItem(type_matcher.GetMatchString().GetStringRef(), + formatter_regex.get())) { + any_printed = true; + result.GetOutputStream().Printf( + "%s: %s\n", type_matcher.GetMatchString().GetCString(), + format_sp->GetDescription().c_str()); } - - any_printed = true; - result.GetOutputStream().Printf( - "%s: %s\n", type_matcher.GetMatchString().GetCString(), - format_sp->GetDescription().c_str()); return true; }); @@ -1121,24 +1119,13 @@ .SetWithRegex([&result, &formatter_regex, &any_printed]( const TypeMatcher &type_matcher, const FormatterSharedPointer &format_sp) -> bool { - if (formatter_regex) { - bool escape = true; - if (type_matcher.CreatedBySameMatchString( - ConstString(formatter_regex->GetText()))) { - escape = false; - } else if (formatter_regex->Execute( - type_matcher.GetMatchString().GetStringRef())) { - escape = false; - } - - if (escape) - return true; + if (ShouldListItem(type_matcher.GetMatchString().GetStringRef(), + formatter_regex.get())) { + any_printed = true; + result.GetOutputStream().Printf( + "%s: %s\n", type_matcher.GetMatchString().GetCString(), + format_sp->GetDescription().c_str()); } - - any_printed = true; - result.GetOutputStream().Printf( - "%s: %s\n", type_matcher.GetMatchString().GetCString(), - format_sp->GetDescription().c_str()); return true; }); @@ -1155,20 +1142,9 @@ DataVisualization::Categories::ForEach( [&category_regex, &category_closure]( const lldb::TypeCategoryImplSP &category) -> bool { - if (category_regex) { - bool escape = true; - if (category->GetName() == category_regex->GetText()) { - escape = false; - } else if (category_regex->Execute(category->GetName())) { - escape = false; - } - - if (escape) - return true; + if (ShouldListItem(category->GetName(), category_regex.get())) { + category_closure(category); } - - category_closure(category); - return true; });