[Lldb-commits] [lldb] r253423 - Cleanup the type X list commands to use the new ForEach goodness
Zachary Turner via lldb-commits
lldb-commits at lists.llvm.org
Wed Nov 18 10:40:18 PST 2015
I'll take a look
On Wed, Nov 18, 2015 at 10:21 AM Enrico Granata <egranata at apple.com> wrote:
> This smells like compiler bug:
>
> trying to match the argument list '(bool (__cdecl *)(lldb_private::ConstString,const lldb_private::TypeFormatImpl::SharedPointer &))'
>
> it fails saying this could be a candidate:
>
> c:\lldbSlave\lldb-win7-android\llvm\tools\lldb\include\lldb/DataFormatters/TypeCategory.h(122): or 'lldb_private::TypeCategoryImpl::ForEachCallbacks<FormatterType> &lldb_private::TypeCategoryImpl::ForEachCallbacks<FormatterType>::Set<lldb_private::TypeFormatImpl>(std::function<bool (KeyType,const std::shared_ptr<lldb_private::TypeFormatImpl> &)>)'
> with
> [
> FormatterType=lldb_private::TypeFormatImpl
> , KeyType=lldb_private::ConstString
> ]
>
> (hint: it is)
>
> or else this one is also a candidate:
>
> c:\lldbSlave\lldb-win7-android\llvm\tools\lldb\include\lldb/DataFormatters/TypeCategory.h(129): could be 'lldb_private::TypeCategoryImpl::ForEachCallbacks<FormatterType> &lldb_private::TypeCategoryImpl::ForEachCallbacks<FormatterType>::Set<lldb_private::TypeFormatImpl>(std::function<bool (KeyType,const std::shared_ptr<lldb_private::TypeFormatImpl> &)>)'
> with
> [
> FormatterType=lldb_private::TypeFormatImpl
> , KeyType=lldb::RegularExpressionSP
> ]
>
> which seems highly unlikely given that there is nothing in common between
> ConstString and RegularExpressionSP
>
> With that said, since I do want to get this code in, is it possible to get
> someone on the Windows side to help me clean up in such a way that it works
> on MSVC?
> I would do the dance myself, but I don’t have a Windows install handy
>
> On Nov 18, 2015, at 4:14 AM, Tamas Berghammer <tberghammer at google.com>
> wrote:
>
> Hi Enrico,
>
> I reverted this CL and the follow-up one (r253424) as they are breaking
> the Windows build. For the error message please see
> http://lab.llvm.org:8011/builders/lldb-windows7-android/builds/2781
>
> Tamas
>
> On Wed, Nov 18, 2015 at 1:40 AM Enrico Granata via lldb-commits <
> lldb-commits at lists.llvm.org> wrote:
>
>> Author: enrico
>> Date: Tue Nov 17 19:37:49 2015
>> New Revision: 253423
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=253423&view=rev
>> Log:
>> Cleanup the type X list commands to use the new ForEach goodness
>>
>>
>> Modified:
>> lldb/trunk/include/lldb/DataFormatters/DataVisualization.h
>> lldb/trunk/include/lldb/DataFormatters/FormatManager.h
>> lldb/trunk/include/lldb/DataFormatters/FormattersContainer.h
>> lldb/trunk/include/lldb/DataFormatters/TypeCategory.h
>> lldb/trunk/include/lldb/DataFormatters/TypeCategoryMap.h
>> lldb/trunk/include/lldb/DataFormatters/TypeSynthetic.h
>> lldb/trunk/source/API/SBTypeCategory.cpp
>> lldb/trunk/source/Commands/CommandObjectType.cpp
>> lldb/trunk/source/DataFormatters/DataVisualization.cpp
>> lldb/trunk/source/DataFormatters/FormatManager.cpp
>> lldb/trunk/source/DataFormatters/TypeCategoryMap.cpp
>>
>> Modified: lldb/trunk/include/lldb/DataFormatters/DataVisualization.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/DataVisualization.h?rev=253423&r1=253422&r2=253423&view=diff
>>
>> ==============================================================================
>> --- lldb/trunk/include/lldb/DataFormatters/DataVisualization.h (original)
>> +++ lldb/trunk/include/lldb/DataFormatters/DataVisualization.h Tue Nov 17
>> 19:37:49 2015
>> @@ -101,7 +101,7 @@ public:
>> Clear ();
>>
>> static void
>> - LoopThrough (TypeSummaryImpl::SummaryCallback callback, void*
>> callback_baton);
>> + ForEach (std::function<bool(ConstString, const
>> lldb::TypeSummaryImplSP&)> callback);
>>
>> static uint32_t
>> GetCount ();
>> @@ -158,9 +158,6 @@ public:
>> DisableStar ();
>>
>> static void
>> - LoopThrough (FormatManager::CategoryCallback callback, void*
>> callback_baton);
>> -
>> - static void
>> ForEach (TypeCategoryMap::ForEachCallback callback);
>>
>> static uint32_t
>>
>> Modified: lldb/trunk/include/lldb/DataFormatters/FormatManager.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/FormatManager.h?rev=253423&r1=253422&r2=253423&view=diff
>>
>> ==============================================================================
>> --- lldb/trunk/include/lldb/DataFormatters/FormatManager.h (original)
>> +++ lldb/trunk/include/lldb/DataFormatters/FormatManager.h Tue Nov 17
>> 19:37:49 2015
>> @@ -140,9 +140,6 @@ public:
>> }
>>
>> void
>> - LoopThroughCategories (CategoryCallback callback, void* param);
>> -
>> - void
>> ForEachCategory (TypeCategoryMap::ForEachCallback callback);
>>
>> lldb::TypeCategoryImplSP
>>
>> Modified: lldb/trunk/include/lldb/DataFormatters/FormattersContainer.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/FormattersContainer.h?rev=253423&r1=253422&r2=253423&view=diff
>>
>> ==============================================================================
>> --- lldb/trunk/include/lldb/DataFormatters/FormattersContainer.h
>> (original)
>> +++ lldb/trunk/include/lldb/DataFormatters/FormattersContainer.h Tue Nov
>> 17 19:37:49 2015
>> @@ -141,22 +141,6 @@ public:
>> }
>>
>> void
>> - LoopThrough (CallbackType callback, void* param)
>> - {
>> - if (callback)
>> - {
>> - Mutex::Locker locker(m_map_mutex);
>> - MapIterator pos, end = m_map.end();
>> - for (pos = m_map.begin(); pos != end; pos++)
>> - {
>> - KeyType type = pos->first;
>> - if (!callback(param, type, pos->second))
>> - break;
>> - }
>> - }
>> - }
>> -
>> - void
>> ForEach (ForEachCallback callback)
>> {
>> if (callback)
>> @@ -316,12 +300,6 @@ public:
>> }
>>
>> void
>> - LoopThrough (CallbackType callback, void* param)
>> - {
>> - m_format_map.LoopThrough(callback,param);
>> - }
>> -
>> - void
>> ForEach (ForEachCallback callback)
>> {
>> m_format_map.ForEach(callback);
>>
>> Modified: lldb/trunk/include/lldb/DataFormatters/TypeCategory.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/TypeCategory.h?rev=253423&r1=253422&r2=253423&view=diff
>>
>> ==============================================================================
>> --- lldb/trunk/include/lldb/DataFormatters/TypeCategory.h (original)
>> +++ lldb/trunk/include/lldb/DataFormatters/TypeCategory.h Tue Nov 17
>> 19:37:49 2015
>> @@ -67,14 +67,6 @@ namespace lldb_private {
>> return m_regex_sp;
>> }
>>
>> - void
>> - LoopThrough (typename ExactMatchContainer::CallbackType
>> exact_callback,
>> - typename RegexMatchContainer::CallbackType
>> regex_callback)
>> - {
>> - GetExactMatch()->LoopThrough(exact_callback);
>> - GetRegexMatch()->LoopThrough(regex_callback);
>> - }
>> -
>> uint32_t
>> GetCount ()
>> {
>> @@ -95,7 +87,7 @@ namespace lldb_private {
>> typedef FormatterContainerPair<TypeValidatorImpl>
>> ValidatorContainer;
>>
>> #ifndef LLDB_DISABLE_PYTHON
>> - typedef FormatterContainerPair<ScriptedSyntheticChildren>
>> SynthContainer;
>> + typedef FormatterContainerPair<SyntheticChildren> SynthContainer;
>> #endif // LLDB_DISABLE_PYTHON
>>
>> public:
>> @@ -118,74 +110,84 @@ namespace lldb_private {
>> typedef ValidatorContainer::ExactMatchContainerSP
>> ValidatorContainerSP;
>> typedef ValidatorContainer::RegexMatchContainerSP
>> RegexValidatorContainerSP;
>>
>> - class ForEach
>> + template <typename T>
>> + class ForEachCallbacks
>> {
>> public:
>> - ForEach () = default;
>> - ~ForEach () = default;
>> + ForEachCallbacks () = default;
>> + ~ForEachCallbacks () = default;
>>
>> - ForEach&
>> - SetFormatExactCallback
>> (FormatContainer::ExactMatchForEachCallback callback)
>> + template<typename U = TypeFormatImpl>
>> + typename std::enable_if<std::is_same<U,T>::value,
>> ForEachCallbacks&>::type
>> + Set (FormatContainer::ExactMatchForEachCallback callback)
>> {
>> m_format_exact = callback;
>> return *this;
>> }
>> - ForEach&
>> - SetFormatRegexCallback
>> (FormatContainer::RegexMatchForEachCallback callback)
>> + template<typename U = TypeFormatImpl>
>> + typename std::enable_if<std::is_same<U,T>::value,
>> ForEachCallbacks&>::type
>> + Set (FormatContainer::RegexMatchForEachCallback callback)
>> {
>> m_format_regex = callback;
>> return *this;
>> }
>>
>> - ForEach&
>> - SetSummaryExactCallback
>> (SummaryContainer::ExactMatchForEachCallback callback)
>> + template<typename U = TypeSummaryImpl>
>> + typename std::enable_if<std::is_same<U,T>::value,
>> ForEachCallbacks&>::type
>> + Set (SummaryContainer::ExactMatchForEachCallback callback)
>> {
>> m_summary_exact = callback;
>> return *this;
>> }
>> - ForEach&
>> - SetSummaryRegexCallback
>> (SummaryContainer::RegexMatchForEachCallback callback)
>> + template<typename U = TypeSummaryImpl>
>> + typename std::enable_if<std::is_same<U,T>::value,
>> ForEachCallbacks&>::type
>> + Set (SummaryContainer::RegexMatchForEachCallback callback)
>> {
>> m_summary_regex = callback;
>> return *this;
>> }
>>
>> - ForEach&
>> - SetFilterExactCallback
>> (FilterContainer::ExactMatchForEachCallback callback)
>> + template<typename U = TypeFilterImpl>
>> + typename std::enable_if<std::is_same<U,T>::value,
>> ForEachCallbacks&>::type
>> + Set (FilterContainer::ExactMatchForEachCallback callback)
>> {
>> m_filter_exact = callback;
>> return *this;
>> }
>> - ForEach&
>> - SetFilterRegexCallback
>> (FilterContainer::RegexMatchForEachCallback callback)
>> + template<typename U = TypeFilterImpl>
>> + typename std::enable_if<std::is_same<U,T>::value,
>> ForEachCallbacks&>::type
>> + Set (FilterContainer::RegexMatchForEachCallback callback)
>> {
>> m_filter_regex = callback;
>> return *this;
>> }
>>
>> #ifndef LLDB_DISABLE_PYTHON
>> - ForEach&
>> - SetSynthExactCallback
>> (SynthContainer::ExactMatchForEachCallback callback)
>> + template<typename U = SyntheticChildren>
>> + typename std::enable_if<std::is_same<U,T>::value,
>> ForEachCallbacks&>::type
>> + Set (SynthContainer::ExactMatchForEachCallback callback)
>> {
>> m_synth_exact = callback;
>> return *this;
>> }
>> - ForEach&
>> - SetSynthRegexCallback
>> (SynthContainer::RegexMatchForEachCallback callback)
>> + template<typename U = SyntheticChildren>
>> + typename std::enable_if<std::is_same<U,T>::value,
>> ForEachCallbacks&>::type
>> + Set (SynthContainer::RegexMatchForEachCallback callback)
>> {
>> m_synth_regex = callback;
>> return *this;
>> }
>> #endif // LLDB_DISABLE_PYTHON
>> -
>> - ForEach&
>> - SetValidatorExactCallback
>> (ValidatorContainer::ExactMatchForEachCallback callback)
>> + template<typename U = TypeValidatorImpl>
>> + typename std::enable_if<std::is_same<U,T>::value,
>> ForEachCallbacks&>::type
>> + Set (ValidatorContainer::ExactMatchForEachCallback callback)
>> {
>> m_validator_exact = callback;
>> return *this;
>> }
>> - ForEach&
>> - SetValidatorRegexCallback
>> (ValidatorContainer::RegexMatchForEachCallback callback)
>> + template<typename U = TypeValidatorImpl>
>> + typename std::enable_if<std::is_same<U,T>::value,
>> ForEachCallbacks&>::type
>> + Set (ValidatorContainer::RegexMatchForEachCallback callback)
>> {
>> m_validator_regex = callback;
>> return *this;
>> @@ -271,8 +273,9 @@ namespace lldb_private {
>> ConstString name,
>> std::initializer_list<lldb::LanguageType>
>> langs = {});
>>
>> + template <typename T>
>> void
>> - ForEach (const ForEach &foreach)
>> + ForEach (const ForEachCallbacks<T> &foreach)
>> {
>>
>> GetTypeFormatsContainer()->ForEach(foreach.GetFormatExactCallback());
>>
>> GetRegexTypeFormatsContainer()->ForEach(foreach.GetFormatRegexCallback());
>>
>> Modified: lldb/trunk/include/lldb/DataFormatters/TypeCategoryMap.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/TypeCategoryMap.h?rev=253423&r1=253422&r2=253423&view=diff
>>
>> ==============================================================================
>> --- lldb/trunk/include/lldb/DataFormatters/TypeCategoryMap.h (original)
>> +++ lldb/trunk/include/lldb/DataFormatters/TypeCategoryMap.h Tue Nov 17
>> 19:37:49 2015
>> @@ -88,9 +88,6 @@ namespace lldb_private {
>> ValueSP& entry);
>>
>> void
>> - LoopThrough (CallbackType callback, void* param);
>> -
>> - void
>> ForEach (ForEachCallback callback);
>>
>> lldb::TypeCategoryImplSP
>>
>> Modified: lldb/trunk/include/lldb/DataFormatters/TypeSynthetic.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/TypeSynthetic.h?rev=253423&r1=253422&r2=253423&view=diff
>>
>> ==============================================================================
>> --- lldb/trunk/include/lldb/DataFormatters/TypeSynthetic.h (original)
>> +++ lldb/trunk/include/lldb/DataFormatters/TypeSynthetic.h Tue Nov 17
>> 19:37:49 2015
>> @@ -479,6 +479,8 @@ namespace lldb_private {
>> return SyntheticChildrenFrontEnd::AutoPointer(new
>> FrontEnd(this, backend));
>> }
>>
>> + typedef std::shared_ptr<TypeFilterImpl> SharedPointer;
>> +
>> private:
>> DISALLOW_COPY_AND_ASSIGN(TypeFilterImpl);
>> };
>>
>> Modified: lldb/trunk/source/API/SBTypeCategory.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBTypeCategory.cpp?rev=253423&r1=253422&r2=253423&view=diff
>>
>> ==============================================================================
>> --- lldb/trunk/source/API/SBTypeCategory.cpp (original)
>> +++ lldb/trunk/source/API/SBTypeCategory.cpp Tue Nov 17 19:37:49 2015
>> @@ -180,7 +180,7 @@ SBTypeCategory::GetFilterForType (SBType
>> if (!spec.IsValid())
>> return SBTypeFilter();
>>
>> - lldb::SyntheticChildrenSP children_sp;
>> + lldb::TypeFilterImplSP children_sp;
>>
>> if (spec.IsRegex())
>>
>> m_opaque_sp->GetRegexTypeFiltersContainer()->GetExact(ConstString(spec.GetName()),
>> children_sp);
>>
>> Modified: lldb/trunk/source/Commands/CommandObjectType.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectType.cpp?rev=253423&r1=253422&r2=253423&view=diff
>>
>> ==============================================================================
>> --- lldb/trunk/source/Commands/CommandObjectType.cpp (original)
>> +++ lldb/trunk/source/Commands/CommandObjectType.cpp Tue Nov 17 19:37:49
>> 2015
>> @@ -1089,13 +1089,6 @@ CommandObjectTypeFormatterDelete::Comman
>> { 0, false, NULL, 0, 0, NULL, NULL, 0, eArgTypeNone, NULL }
>> };
>>
>> -
>> -
>> -
>> -
>> -
>> -
>> -
>> class CommandObjectTypeFormatterClear : public CommandObjectParsed
>> {
>> private:
>> @@ -1224,10 +1217,6 @@ CommandObjectTypeFormatterClear::Command
>> { 0, false, NULL, 0, 0, NULL, NULL, 0, eArgTypeNone, NULL }
>> };
>>
>> -
>> -
>> -
>> -
>>
>> //-------------------------------------------------------------------------
>> // CommandObjectTypeFormatDelete
>>
>> //-------------------------------------------------------------------------
>> @@ -1264,25 +1253,8 @@ public:
>> }
>> };
>>
>>
>> -//-------------------------------------------------------------------------
>> -// CommandObjectTypeFormatList
>>
>> -//-------------------------------------------------------------------------
>> -
>> -bool CommandObjectTypeFormatList_LoopCallback(void* pt2self, ConstString
>> type, const lldb::TypeFormatImplSP& entry);
>> -bool CommandObjectTypeRXFormatList_LoopCallback(void* pt2self,
>> lldb::RegularExpressionSP regex, const lldb::TypeFormatImplSP& entry);
>> -
>> -class CommandObjectTypeFormatList;
>> -
>> -struct CommandObjectTypeFormatList_LoopCallbackParam {
>> - CommandObjectTypeFormatList* self;
>> - CommandReturnObject* result;
>> - RegularExpression* regex;
>> - RegularExpression* cate_regex;
>> -
>> CommandObjectTypeFormatList_LoopCallbackParam(CommandObjectTypeFormatList*
>> S, CommandReturnObject* R,
>> - RegularExpression* X = NULL,
>> RegularExpression* CX = NULL) : self(S), result(R), regex(X),
>> cate_regex(CX) {}
>> -};
>> -
>> -class CommandObjectTypeFormatList : public CommandObjectParsed
>> +template <typename FormatterType>
>> +class CommandObjectTypeFormatterList : public CommandObjectParsed
>> {
>> class CommandOptions : public Options
>> {
>> @@ -1323,6 +1295,12 @@ class CommandObjectTypeFormatList : publ
>> const OptionDefinition*
>> GetDefinitions () override
>> {
>> + static OptionDefinition g_option_table[] =
>> + {
>> + { LLDB_OPT_SET_ALL, false, "category-regex", 'w',
>> OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeName, "Only show
>> categories matching this filter."},
>> + { 0, false, NULL, 0, 0, NULL, NULL, 0, eArgTypeNone,
>> NULL }
>> + };
>> +
>> return g_option_table;
>> }
>>
>> @@ -1345,10 +1323,12 @@ class CommandObjectTypeFormatList : publ
>> }
>>
>> public:
>> - CommandObjectTypeFormatList (CommandInterpreter &interpreter) :
>> + CommandObjectTypeFormatterList (CommandInterpreter &interpreter,
>> + const char* name,
>> + const char* help) :
>> CommandObjectParsed (interpreter,
>> - "type format list",
>> - "Show a list of current formatting styles.",
>> + name,
>> + help,
>> NULL),
>> m_options(interpreter)
>> {
>> @@ -1363,115 +1343,137 @@ public:
>> m_arguments.push_back (type_arg);
>> }
>>
>> - ~CommandObjectTypeFormatList () override
>> + ~CommandObjectTypeFormatterList () override
>> {
>> }
>>
>> protected:
>> + virtual void
>> + FormatterSpecificList (CommandReturnObject &result)
>> + {
>> + }
>> +
>> bool
>> DoExecute (Args& command, CommandReturnObject &result) override
>> {
>> const size_t argc = command.GetArgumentCount();
>>
>> - CommandObjectTypeFormatList_LoopCallbackParam *param;
>> - RegularExpression* cate_regex =
>> - m_options.m_category_regex.empty() ? NULL :
>> - new RegularExpression(m_options.m_category_regex.c_str());
>> + std::unique_ptr<RegularExpression> category_regex;
>> + std::unique_ptr<RegularExpression> formatter_regex;
>> +
>> + if (m_options.m_category_regex.size() > 0)
>> + {
>> + category_regex.reset(new RegularExpression());
>> + if
>> (!category_regex->Compile(m_options.m_category_regex.c_str()))
>> + {
>> + result.AppendErrorWithFormat("syntax error in category
>> regular expression '%s'", m_options.m_category_regex.c_str());
>> + result.SetStatus(eReturnStatusFailed);
>> + return false;
>> + }
>> + }
>>
>> if (argc == 1)
>> {
>> - RegularExpression* regex = new
>> RegularExpression(command.GetArgumentAtIndex(0));
>> - regex->Compile(command.GetArgumentAtIndex(0));
>> - param = new
>> CommandObjectTypeFormatList_LoopCallbackParam(this,&result,regex,cate_regex);
>> + const char* arg = command.GetArgumentAtIndex(1);
>> + formatter_regex.reset(new RegularExpression());
>> + if (!formatter_regex->Compile(arg))
>> + {
>> + result.AppendErrorWithFormat("syntax error in regular
>> expression '%s'", arg);
>> + result.SetStatus(eReturnStatusFailed);
>> + return false;
>> + }
>> }
>> - else
>> - param = new
>> CommandObjectTypeFormatList_LoopCallbackParam(this,&result,NULL,cate_regex);
>>
>> -
>> DataVisualization::Categories::LoopThrough(PerCategoryCallback,param);
>> - delete param;
>> + DataVisualization::Categories::ForEach( [this, &command,
>> &result, &category_regex, &formatter_regex] (const
>> lldb::TypeCategoryImplSP& category) -> bool {
>> + if (category_regex)
>> + {
>> + bool escape = true;
>> + if (0 == strcmp(category->GetName(),
>> category_regex->GetText()))
>> + {
>> + escape = false;
>> + }
>> + else if (category_regex->Execute(category->GetName()))
>> + {
>> + escape = false;
>> + }
>> +
>> + if (escape)
>> + return true;
>> + }
>> +
>> +
>> result.GetOutputStream().Printf("-----------------------\nCategory:
>> %s\n-----------------------\n", category->GetName());
>> +
>> + TypeCategoryImpl::ForEachCallbacks<FormatterType> foreach;
>> + foreach.Set( [&result, &formatter_regex] (ConstString name,
>> const typename FormatterType::SharedPointer& format_sp) -> bool {
>> + if (formatter_regex)
>> + {
>> + bool escape = true;
>> + if (0 == strcmp(name.AsCString(),
>> formatter_regex->GetText()))
>> + {
>> + escape = false;
>> + }
>> + else if (formatter_regex->Execute(name.AsCString()))
>> + {
>> + escape = false;
>> + }
>> +
>> + if (escape)
>> + return true;
>> + }
>> +
>> + result.GetOutputStream().Printf ("%s: %s\n",
>> name.AsCString(), format_sp->GetDescription().c_str());
>> +
>> + return true;
>> + });
>> +
>> + foreach.Set( [&result, &formatter_regex]
>> (RegularExpressionSP regex_sp, const typename FormatterType::SharedPointer&
>> format_sp) -> bool {
>> + if (formatter_regex)
>> + {
>> + bool escape = true;
>> + if (0 == strcmp(regex_sp->GetText(),
>> formatter_regex->GetText()))
>> + {
>> + escape = false;
>> + }
>> + else if
>> (formatter_regex->Execute(regex_sp->GetText()))
>> + {
>> + escape = false;
>> + }
>> +
>> + if (escape)
>> + return true;
>> + }
>> +
>> + result.GetOutputStream().Printf ("%s: %s\n",
>> regex_sp->GetText(), format_sp->GetDescription().c_str());
>> +
>> + return true;
>> + });
>>
>> - if (cate_regex)
>> - delete cate_regex;
>> + category->ForEach(foreach);
>> +
>> + return true;
>> + });
>>
>> + FormatterSpecificList(result);
>> +
>> result.SetStatus(eReturnStatusSuccessFinishResult);
>> return result.Succeeded();
>> }
>> -
>> -private:
>> -
>> - static bool
>> - PerCategoryCallback(void* param_vp,
>> - const lldb::TypeCategoryImplSP& cate)
>> - {
>> -
>> - CommandObjectTypeFormatList_LoopCallbackParam* param =
>> - (CommandObjectTypeFormatList_LoopCallbackParam*)param_vp;
>> - CommandReturnObject* result = param->result;
>> -
>> - const char* cate_name = cate->GetName();
>> -
>> - // if the category is disabled or empty and there is no regex,
>> just skip it
>> - if ((cate->IsEnabled() == false ||
>> cate->GetCount(eFormatCategoryItemValue | eFormatCategoryItemRegexValue) ==
>> 0) && param->cate_regex == NULL)
>> - return true;
>> -
>> - // if we have a regex and this category does not match it, just
>> skip it
>> - if(param->cate_regex != NULL &&
>> strcmp(cate_name,param->cate_regex->GetText()) != 0 &&
>> param->cate_regex->Execute(cate_name) == false)
>> - return true;
>> -
>> -
>> result->GetOutputStream().Printf("-----------------------\nCategory:
>> %s\n-----------------------\n", cate->GetDescription().c_str());
>> -
>> -
>> cate->GetTypeFormatsContainer()->LoopThrough(CommandObjectTypeFormatList_LoopCallback,
>> param_vp);
>> -
>> - if (cate->GetRegexTypeFormatsContainer()->GetCount() > 0)
>> - {
>> - result->GetOutputStream().Printf("Regex-based formats
>> (slower):\n");
>> -
>> cate->GetRegexTypeFormatsContainer()->LoopThrough(CommandObjectTypeRXFormatList_LoopCallback,
>> param_vp);
>> - }
>> - return true;
>> - }
>> -
>> -
>> - bool
>> - LoopCallback (const char* type,
>> - const lldb::TypeFormatImplSP& entry,
>> - RegularExpression* regex,
>> - CommandReturnObject *result)
>> - {
>> - if (regex == NULL || strcmp(type,regex->GetText()) == 0 ||
>> regex->Execute(type))
>> - result->GetOutputStream().Printf ("%s: %s\n", type,
>> entry->GetDescription().c_str());
>> - return true;
>> - }
>> -
>> - friend bool CommandObjectTypeFormatList_LoopCallback(void* pt2self,
>> ConstString type, const lldb::TypeFormatImplSP& entry);
>> - friend bool CommandObjectTypeRXFormatList_LoopCallback(void*
>> pt2self, lldb::RegularExpressionSP regex, const lldb::TypeFormatImplSP&
>> entry);
>> -
>> };
>>
>> -bool
>> -CommandObjectTypeFormatList_LoopCallback (
>> - void* pt2self,
>> - ConstString type,
>> - const lldb::TypeFormatImplSP& entry)
>> -{
>> - CommandObjectTypeFormatList_LoopCallbackParam* param =
>> (CommandObjectTypeFormatList_LoopCallbackParam*)pt2self;
>> - return param->self->LoopCallback(type.AsCString(), entry,
>> param->regex, param->result);
>> -}
>> -
>> -bool
>> -CommandObjectTypeRXFormatList_LoopCallback (
>> - void* pt2self,
>> - lldb::RegularExpressionSP
>> regex,
>> - const
>> lldb::TypeFormatImplSP& entry)
>> -{
>> - CommandObjectTypeFormatList_LoopCallbackParam* param =
>> (CommandObjectTypeFormatList_LoopCallbackParam*)pt2self;
>> - return param->self->LoopCallback(regex->GetText(), entry,
>> param->regex, param->result);
>> -}
>>
>> +//-------------------------------------------------------------------------
>> +// CommandObjectTypeFormatList
>>
>> +//-------------------------------------------------------------------------
>>
>> -OptionDefinition
>> -CommandObjectTypeFormatList::CommandOptions::g_option_table[] =
>> +class CommandObjectTypeFormatList : public
>> CommandObjectTypeFormatterList<TypeFormatImpl>
>> {
>> - { LLDB_OPT_SET_ALL, false, "category-regex", 'w',
>> OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeName, "Only show
>> categories matching this filter."},
>> - { 0, false, NULL, 0, 0, NULL, NULL, 0, eArgTypeNone, NULL }
>> +public:
>> +
>> + CommandObjectTypeFormatList (CommandInterpreter &interpreter) :
>> + CommandObjectTypeFormatterList(interpreter,
>> + "type format list",
>> + "Show a list of current formats.")
>> + {
>> + }
>> };
>>
>> #ifndef LLDB_DISABLE_PYTHON
>> @@ -2046,226 +2048,30 @@ protected:
>> // CommandObjectTypeSummaryList
>>
>> //-------------------------------------------------------------------------
>>
>> -bool CommandObjectTypeSummaryList_LoopCallback(void* pt2self,
>> ConstString type, const StringSummaryFormat::SharedPointer& entry);
>> -bool CommandObjectTypeRXSummaryList_LoopCallback(void* pt2self,
>> lldb::RegularExpressionSP regex, const StringSummaryFormat::SharedPointer&
>> entry);
>> -
>> -class CommandObjectTypeSummaryList;
>> -
>> -struct CommandObjectTypeSummaryList_LoopCallbackParam {
>> - CommandObjectTypeSummaryList* self;
>> - CommandReturnObject* result;
>> - RegularExpression* regex;
>> - RegularExpression* cate_regex;
>> -
>> CommandObjectTypeSummaryList_LoopCallbackParam(CommandObjectTypeSummaryList*
>> S, CommandReturnObject* R,
>> - RegularExpression* X =
>> NULL,
>> - RegularExpression* CX
>> = NULL) : self(S), result(R), regex(X), cate_regex(CX) {}
>> -};
>> -
>> -class CommandObjectTypeSummaryList : public CommandObjectParsed
>> +class CommandObjectTypeSummaryList : public
>> CommandObjectTypeFormatterList<TypeSummaryImpl>
>> {
>> -
>> - class CommandOptions : public Options
>> - {
>> - public:
>> -
>> - CommandOptions (CommandInterpreter &interpreter) :
>> - Options (interpreter)
>> - {
>> - }
>> -
>> - ~CommandOptions () override {}
>> -
>> - Error
>> - SetOptionValue (uint32_t option_idx, const char *option_arg)
>> override
>> - {
>> - Error error;
>> - const int short_option = m_getopt_table[option_idx].val;
>> -
>> - switch (short_option)
>> - {
>> - case 'w':
>> - m_category_regex = std::string(option_arg);
>> - break;
>> - default:
>> - error.SetErrorStringWithFormat ("unrecognized option
>> '%c'", short_option);
>> - break;
>> - }
>> -
>> - return error;
>> - }
>> -
>> - void
>> - OptionParsingStarting () override
>> - {
>> - m_category_regex = "";
>> - }
>> -
>> - const OptionDefinition*
>> - GetDefinitions () override
>> - {
>> - return g_option_table;
>> - }
>> -
>> - // Options table: Required for subclasses of Options.
>> -
>> - static OptionDefinition g_option_table[];
>> -
>> - // Instance variables to hold the values for command options.
>> -
>> - std::string m_category_regex;
>> -
>> - };
>> -
>> - CommandOptions m_options;
>> -
>> - Options *
>> - GetOptions () override
>> - {
>> - return &m_options;
>> - }
>> -
>> public:
>> - CommandObjectTypeSummaryList (CommandInterpreter &interpreter) :
>> - CommandObjectParsed (interpreter,
>> - "type summary list",
>> - "Show a list of current summary styles.",
>> - NULL),
>> - m_options(interpreter)
>> - {
>> - CommandArgumentEntry type_arg;
>> - CommandArgumentData type_style_arg;
>> -
>> - type_style_arg.arg_type = eArgTypeName;
>> - type_style_arg.arg_repetition = eArgRepeatOptional;
>> -
>> - type_arg.push_back (type_style_arg);
>> -
>> - m_arguments.push_back (type_arg);
>> - }
>>
>> - ~CommandObjectTypeSummaryList () override
>> + CommandObjectTypeSummaryList (CommandInterpreter &interpreter) :
>> + CommandObjectTypeFormatterList(interpreter,
>> + "type summary list",
>> + "Show a list of current summaries.")
>> {
>> }
>>
>> protected:
>> - bool
>> - DoExecute (Args& command, CommandReturnObject &result) override
>> + void
>> + FormatterSpecificList (CommandReturnObject &result) override
>> {
>> - const size_t argc = command.GetArgumentCount();
>> -
>> - CommandObjectTypeSummaryList_LoopCallbackParam *param;
>> - RegularExpression* cate_regex =
>> - m_options.m_category_regex.empty() ? NULL :
>> - new RegularExpression(m_options.m_category_regex.c_str());
>> -
>> - if (argc == 1)
>> - {
>> - RegularExpression* regex = new
>> RegularExpression(command.GetArgumentAtIndex(0));
>> - regex->Compile(command.GetArgumentAtIndex(0));
>> - param = new
>> CommandObjectTypeSummaryList_LoopCallbackParam(this,&result,regex,cate_regex);
>> - }
>> - else
>> - param = new
>> CommandObjectTypeSummaryList_LoopCallbackParam(this,&result,NULL,cate_regex);
>> -
>> -
>> DataVisualization::Categories::LoopThrough(PerCategoryCallback,param);
>> - delete param;
>> -
>> if (DataVisualization::NamedSummaryFormats::GetCount() > 0)
>> {
>> result.GetOutputStream().Printf("Named summaries:\n");
>> - if (argc == 1)
>> - {
>> - RegularExpression* regex = new
>> RegularExpression(command.GetArgumentAtIndex(0));
>> - regex->Compile(command.GetArgumentAtIndex(0));
>> - param = new
>> CommandObjectTypeSummaryList_LoopCallbackParam(this,&result,regex);
>> - }
>> - else
>> - param = new
>> CommandObjectTypeSummaryList_LoopCallbackParam(this,&result);
>> -
>> DataVisualization::NamedSummaryFormats::LoopThrough(CommandObjectTypeSummaryList_LoopCallback,
>> param);
>> - delete param;
>> - }
>> -
>> - if (cate_regex)
>> - delete cate_regex;
>> -
>> - result.SetStatus(eReturnStatusSuccessFinishResult);
>> - return result.Succeeded();
>> - }
>> -
>> -private:
>> -
>> - static bool
>> - PerCategoryCallback(void* param_vp,
>> - const lldb::TypeCategoryImplSP& cate)
>> - {
>> -
>> - CommandObjectTypeSummaryList_LoopCallbackParam* param =
>> - (CommandObjectTypeSummaryList_LoopCallbackParam*)param_vp;
>> - CommandReturnObject* result = param->result;
>> -
>> - const char* cate_name = cate->GetName();
>> -
>> - // if the category is disabled or empty and there is no regex,
>> just skip it
>> - if ((cate->IsEnabled() == false ||
>> cate->GetCount(eFormatCategoryItemSummary |
>> eFormatCategoryItemRegexSummary) == 0) && param->cate_regex == NULL)
>> - return true;
>> -
>> - // if we have a regex and this category does not match it, just
>> skip it
>> - if(param->cate_regex != NULL &&
>> strcmp(cate_name,param->cate_regex->GetText()) != 0 &&
>> param->cate_regex->Execute(cate_name) == false)
>> - return true;
>> -
>> -
>> result->GetOutputStream().Printf("-----------------------\nCategory:
>> %s\n-----------------------\n", cate->GetDescription().c_str());
>> -
>> -
>> cate->GetTypeSummariesContainer()->LoopThrough(CommandObjectTypeSummaryList_LoopCallback,
>> param_vp);
>> -
>> - if (cate->GetRegexTypeSummariesContainer()->GetCount() > 0)
>> - {
>> - result->GetOutputStream().Printf("Regex-based summaries
>> (slower):\n");
>> -
>> cate->GetRegexTypeSummariesContainer()->LoopThrough(CommandObjectTypeRXSummaryList_LoopCallback,
>> param_vp);
>> + DataVisualization::NamedSummaryFormats::ForEach( [&result]
>> (ConstString name, const TypeSummaryImplSP& summary_sp) -> bool {
>> + result.GetOutputStream().Printf ("%s: %s\n",
>> name.AsCString(), summary_sp->GetDescription().c_str());
>> + return true;
>> + });
>> }
>> - return true;
>> - }
>> -
>> -
>> - bool
>> - LoopCallback (const char* type,
>> - const lldb::TypeSummaryImplSP& entry,
>> - RegularExpression* regex,
>> - CommandReturnObject *result)
>> - {
>> - if (regex == NULL || strcmp(type,regex->GetText()) == 0 ||
>> regex->Execute(type))
>> - result->GetOutputStream().Printf ("%s: %s\n", type,
>> entry->GetDescription().c_str());
>> - return true;
>> }
>> -
>> - friend bool CommandObjectTypeSummaryList_LoopCallback(void* pt2self,
>> ConstString type, const lldb::TypeSummaryImplSP& entry);
>> - friend bool CommandObjectTypeRXSummaryList_LoopCallback(void*
>> pt2self, lldb::RegularExpressionSP regex, const lldb::TypeSummaryImplSP&
>> entry);
>> -};
>> -
>> -bool
>> -CommandObjectTypeSummaryList_LoopCallback (
>> - void* pt2self,
>> - ConstString type,
>> - const lldb::TypeSummaryImplSP&
>> entry)
>> -{
>> - CommandObjectTypeSummaryList_LoopCallbackParam* param =
>> (CommandObjectTypeSummaryList_LoopCallbackParam*)pt2self;
>> - return param->self->LoopCallback(type.AsCString(), entry,
>> param->regex, param->result);
>> -}
>> -
>> -bool
>> -CommandObjectTypeRXSummaryList_LoopCallback (
>> - void* pt2self,
>> - lldb::RegularExpressionSP
>> regex,
>> - const
>> lldb::TypeSummaryImplSP& entry)
>> -{
>> - CommandObjectTypeSummaryList_LoopCallbackParam* param =
>> (CommandObjectTypeSummaryList_LoopCallbackParam*)pt2self;
>> - return param->self->LoopCallback(regex->GetText(), entry,
>> param->regex, param->result);
>> -}
>> -
>> -OptionDefinition
>> -CommandObjectTypeSummaryList::CommandOptions::g_option_table[] =
>> -{
>> - { LLDB_OPT_SET_ALL, false, "category-regex", 'w',
>> OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeName, "Only show
>> categories matching this filter."},
>> - { 0, false, NULL, 0, 0, NULL, NULL, 0, eArgTypeNone, NULL }
>> };
>>
>>
>> //-------------------------------------------------------------------------
>> @@ -2786,37 +2592,6 @@ CommandObjectTypeCategoryDisable::Comman
>>
>> class CommandObjectTypeCategoryList : public CommandObjectParsed
>> {
>> -private:
>> -
>> - struct CommandObjectTypeCategoryList_CallbackParam
>> - {
>> - CommandReturnObject* result;
>> - RegularExpression* regex;
>> -
>> - CommandObjectTypeCategoryList_CallbackParam(CommandReturnObject*
>> res,
>> - RegularExpression*
>> rex = NULL) :
>> - result(res),
>> - regex(rex)
>> - {
>> - }
>> -
>> - };
>> -
>> - static bool
>> - PerCategoryCallback(void* param_vp,
>> - const lldb::TypeCategoryImplSP& cate)
>> - {
>> - CommandObjectTypeCategoryList_CallbackParam* param =
>> - (CommandObjectTypeCategoryList_CallbackParam*)param_vp;
>> - CommandReturnObject* result = param->result;
>> - RegularExpression* regex = param->regex;
>> -
>> - const char* cate_name = cate->GetName();
>> -
>> - if (regex == NULL || strcmp(cate_name, regex->GetText()) == 0 ||
>> regex->Execute(cate_name))
>> - result->GetOutputStream().Printf("Category: %s\n",
>> cate->GetDescription().c_str());
>> - return true;
>> - }
>> public:
>> CommandObjectTypeCategoryList (CommandInterpreter &interpreter) :
>> CommandObjectParsed (interpreter,
>> @@ -2844,26 +2619,48 @@ protected:
>> DoExecute (Args& command, CommandReturnObject &result) override
>> {
>> const size_t argc = command.GetArgumentCount();
>> - RegularExpression* regex = NULL;
>> +
>> + std::unique_ptr<RegularExpression> regex;
>>
>> - if (argc == 0)
>> - ;
>> - else if (argc == 1)
>> - regex = new RegularExpression(command.GetArgumentAtIndex(0));
>> - else
>> + if (argc == 1)
>> + {
>> + regex.reset(new RegularExpression());
>> + const char* arg = command.GetArgumentAtIndex(0);
>> + if (!regex->Compile(arg))
>> + {
>> + result.AppendErrorWithFormat("syntax error in category
>> regular expression '%s'", arg);
>> + result.SetStatus(eReturnStatusFailed);
>> + return false;
>> + }
>> + }
>> + else if (argc != 0)
>> {
>> result.AppendErrorWithFormat ("%s takes 0 or one arg.\n",
>> m_cmd_name.c_str());
>> result.SetStatus(eReturnStatusFailed);
>> return false;
>> }
>>
>> - CommandObjectTypeCategoryList_CallbackParam param(&result,
>> - regex);
>> -
>> - DataVisualization::Categories::LoopThrough(PerCategoryCallback,
>> ¶m);
>> -
>> - if (regex)
>> - delete regex;
>> + DataVisualization::Categories::ForEach( [®ex, &result] (const
>> lldb::TypeCategoryImplSP& category_sp) -> bool {
>> + if (regex)
>> + {
>> + bool escape = true;
>> + if (0 == strcmp(category_sp->GetName(),
>> regex->GetText()))
>> + {
>> + escape = false;
>> + }
>> + else if (regex->Execute(category_sp->GetName()))
>> + {
>> + escape = false;
>> + }
>> +
>> + if (escape)
>> + return true;
>> + }
>> +
>> + result.GetOutputStream().Printf("Category: %s\n",
>> category_sp->GetDescription().c_str());
>> +
>> + return true;
>> + });
>>
>> result.SetStatus(eReturnStatusSuccessFinishResult);
>> return result.Succeeded();
>> @@ -2875,210 +2672,16 @@ protected:
>> // CommandObjectTypeFilterList
>>
>> //-------------------------------------------------------------------------
>>
>> -bool CommandObjectTypeFilterList_LoopCallback(void* pt2self, ConstString
>> type, const SyntheticChildren::SharedPointer& entry);
>> -bool CommandObjectTypeFilterRXList_LoopCallback(void* pt2self,
>> lldb::RegularExpressionSP regex, const SyntheticChildren::SharedPointer&
>> entry);
>> -
>> -class CommandObjectTypeFilterList;
>> -
>> -struct CommandObjectTypeFilterList_LoopCallbackParam {
>> - CommandObjectTypeFilterList* self;
>> - CommandReturnObject* result;
>> - RegularExpression* regex;
>> - RegularExpression* cate_regex;
>> -
>> CommandObjectTypeFilterList_LoopCallbackParam(CommandObjectTypeFilterList*
>> S, CommandReturnObject* R,
>> - RegularExpression* X =
>> NULL,
>> - RegularExpression* CX
>> = NULL) : self(S), result(R), regex(X), cate_regex(CX) {}
>> -};
>> -
>> -class CommandObjectTypeFilterList : public CommandObjectParsed
>> +class CommandObjectTypeFilterList : public
>> CommandObjectTypeFormatterList<TypeFilterImpl>
>> {
>> -
>> - class CommandOptions : public Options
>> - {
>> - public:
>> -
>> - CommandOptions (CommandInterpreter &interpreter) :
>> - Options (interpreter)
>> - {
>> - }
>> -
>> - ~CommandOptions () override {}
>> -
>> - Error
>> - SetOptionValue (uint32_t option_idx, const char *option_arg)
>> override
>> - {
>> - Error error;
>> - const int short_option = m_getopt_table[option_idx].val;
>> -
>> - switch (short_option)
>> - {
>> - case 'w':
>> - m_category_regex = std::string(option_arg);
>> - break;
>> - default:
>> - error.SetErrorStringWithFormat ("unrecognized option
>> '%c'", short_option);
>> - break;
>> - }
>> -
>> - return error;
>> - }
>> -
>> - void
>> - OptionParsingStarting () override
>> - {
>> - m_category_regex = "";
>> - }
>> -
>> - const OptionDefinition*
>> - GetDefinitions () override
>> - {
>> - return g_option_table;
>> - }
>> -
>> - // Options table: Required for subclasses of Options.
>> -
>> - static OptionDefinition g_option_table[];
>> -
>> - // Instance variables to hold the values for command options.
>> -
>> - std::string m_category_regex;
>> -
>> - };
>> -
>> - CommandOptions m_options;
>> -
>> - Options *
>> - GetOptions () override
>> - {
>> - return &m_options;
>> - }
>> -
>> public:
>> - CommandObjectTypeFilterList (CommandInterpreter &interpreter) :
>> - CommandObjectParsed (interpreter,
>> - "type filter list",
>> - "Show a list of current filters.",
>> - NULL),
>> - m_options(interpreter)
>> - {
>> - CommandArgumentEntry type_arg;
>> - CommandArgumentData type_style_arg;
>> -
>> - type_style_arg.arg_type = eArgTypeName;
>> - type_style_arg.arg_repetition = eArgRepeatOptional;
>> -
>> - type_arg.push_back (type_style_arg);
>> -
>> - m_arguments.push_back (type_arg);
>> - }
>> -
>> - ~CommandObjectTypeFilterList () override
>> - {
>> - }
>> -
>> -protected:
>> - bool
>> - DoExecute (Args& command, CommandReturnObject &result) override
>> - {
>> - const size_t argc = command.GetArgumentCount();
>> -
>> - CommandObjectTypeFilterList_LoopCallbackParam *param;
>> - RegularExpression* cate_regex =
>> - m_options.m_category_regex.empty() ? NULL :
>> - new RegularExpression(m_options.m_category_regex.c_str());
>> -
>> - if (argc == 1)
>> - {
>> - RegularExpression* regex = new
>> RegularExpression(command.GetArgumentAtIndex(0));
>> - regex->Compile(command.GetArgumentAtIndex(0));
>> - param = new
>> CommandObjectTypeFilterList_LoopCallbackParam(this,&result,regex,cate_regex);
>> - }
>> - else
>> - param = new
>> CommandObjectTypeFilterList_LoopCallbackParam(this,&result,NULL,cate_regex);
>> -
>> -
>> DataVisualization::Categories::LoopThrough(PerCategoryCallback,param);
>> - delete param;
>> -
>> - if (cate_regex)
>> - delete cate_regex;
>> -
>> - result.SetStatus(eReturnStatusSuccessFinishResult);
>> - return result.Succeeded();
>> - }
>>
>> -private:
>> -
>> - static bool
>> - PerCategoryCallback(void* param_vp,
>> - const lldb::TypeCategoryImplSP& cate)
>> - {
>> -
>> - const char* cate_name = cate->GetName();
>> -
>> - CommandObjectTypeFilterList_LoopCallbackParam* param =
>> - (CommandObjectTypeFilterList_LoopCallbackParam*)param_vp;
>> - CommandReturnObject* result = param->result;
>> -
>> - // if the category is disabled or empty and there is no regex,
>> just skip it
>> - if ((cate->IsEnabled() == false ||
>> cate->GetCount(eFormatCategoryItemFilter | eFormatCategoryItemRegexFilter)
>> == 0) && param->cate_regex == NULL)
>> - return true;
>> -
>> - // if we have a regex and this category does not match it, just
>> skip it
>> - if(param->cate_regex != NULL &&
>> strcmp(cate_name,param->cate_regex->GetText()) != 0 &&
>> param->cate_regex->Execute(cate_name) == false)
>> - return true;
>> -
>> -
>> result->GetOutputStream().Printf("-----------------------\nCategory:
>> %s\n-----------------------\n", cate->GetDescription().c_str());
>> -
>> -
>> cate->GetTypeFiltersContainer()->LoopThrough(CommandObjectTypeFilterList_LoopCallback,
>> param_vp);
>> -
>> - if (cate->GetRegexTypeFiltersContainer()->GetCount() > 0)
>> - {
>> - result->GetOutputStream().Printf("Regex-based filters
>> (slower):\n");
>> -
>> cate->GetRegexTypeFiltersContainer()->LoopThrough(CommandObjectTypeFilterRXList_LoopCallback,
>> param_vp);
>> - }
>> -
>> - return true;
>> - }
>> -
>> - bool
>> - LoopCallback (const char* type,
>> - const SyntheticChildren::SharedPointer& entry,
>> - RegularExpression* regex,
>> - CommandReturnObject *result)
>> + CommandObjectTypeFilterList (CommandInterpreter &interpreter) :
>> + CommandObjectTypeFormatterList(interpreter,
>> + "type filter list",
>> + "Show a list of current filters.")
>> {
>> - if (regex == NULL || regex->Execute(type))
>> - result->GetOutputStream().Printf ("%s: %s\n", type,
>> entry->GetDescription().c_str());
>> - return true;
>> }
>> -
>> - friend bool CommandObjectTypeFilterList_LoopCallback(void* pt2self,
>> ConstString type, const SyntheticChildren::SharedPointer& entry);
>> - friend bool CommandObjectTypeFilterRXList_LoopCallback(void*
>> pt2self, lldb::RegularExpressionSP regex, const
>> SyntheticChildren::SharedPointer& entry);
>> -};
>> -
>> -bool
>> -CommandObjectTypeFilterList_LoopCallback (void* pt2self,
>> - ConstString type,
>> - const
>> SyntheticChildren::SharedPointer& entry)
>> -{
>> - CommandObjectTypeFilterList_LoopCallbackParam* param =
>> (CommandObjectTypeFilterList_LoopCallbackParam*)pt2self;
>> - return param->self->LoopCallback(type.AsCString(), entry,
>> param->regex, param->result);
>> -}
>> -
>> -bool
>> -CommandObjectTypeFilterRXList_LoopCallback (void* pt2self,
>> - lldb::RegularExpressionSP
>> regex,
>> - const
>> SyntheticChildren::SharedPointer& entry)
>> -{
>> - CommandObjectTypeFilterList_LoopCallbackParam* param =
>> (CommandObjectTypeFilterList_LoopCallbackParam*)pt2self;
>> - return param->self->LoopCallback(regex->GetText(), entry,
>> param->regex, param->result);
>> -}
>> -
>> -
>> -OptionDefinition
>> -CommandObjectTypeFilterList::CommandOptions::g_option_table[] =
>> -{
>> - { LLDB_OPT_SET_ALL, false, "category-regex", 'w',
>> OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeName, "Only show
>> categories matching this filter."},
>> - { 0, false, NULL, 0, 0, NULL, NULL, 0, eArgTypeNone, NULL }
>> };
>>
>> #ifndef LLDB_DISABLE_PYTHON
>> @@ -3087,210 +2690,16 @@ CommandObjectTypeFilterList::CommandOpti
>> // CommandObjectTypeSynthList
>>
>> //-------------------------------------------------------------------------
>>
>> -bool CommandObjectTypeSynthList_LoopCallback(void* pt2self, ConstString
>> type, const SyntheticChildren::SharedPointer& entry);
>> -bool CommandObjectTypeSynthRXList_LoopCallback(void* pt2self,
>> lldb::RegularExpressionSP regex, const SyntheticChildren::SharedPointer&
>> entry);
>> -
>> -class CommandObjectTypeSynthList;
>> -
>> -struct CommandObjectTypeSynthList_LoopCallbackParam {
>> - CommandObjectTypeSynthList* self;
>> - CommandReturnObject* result;
>> - RegularExpression* regex;
>> - RegularExpression* cate_regex;
>> -
>> CommandObjectTypeSynthList_LoopCallbackParam(CommandObjectTypeSynthList* S,
>> CommandReturnObject* R,
>> - RegularExpression* X =
>> NULL,
>> - RegularExpression* CX =
>> NULL) : self(S), result(R), regex(X), cate_regex(CX) {}
>> -};
>> -
>> -class CommandObjectTypeSynthList : public CommandObjectParsed
>> +class CommandObjectTypeSynthList : public
>> CommandObjectTypeFormatterList<SyntheticChildren>
>> {
>> -
>> - class CommandOptions : public Options
>> - {
>> - public:
>> -
>> - CommandOptions (CommandInterpreter &interpreter) :
>> - Options (interpreter)
>> - {
>> - }
>> -
>> - ~CommandOptions () override {}
>> -
>> - Error
>> - SetOptionValue (uint32_t option_idx, const char *option_arg)
>> override
>> - {
>> - Error error;
>> - const int short_option = m_getopt_table[option_idx].val;
>> -
>> - switch (short_option)
>> - {
>> - case 'w':
>> - m_category_regex = std::string(option_arg);
>> - break;
>> - default:
>> - error.SetErrorStringWithFormat ("unrecognized option
>> '%c'", short_option);
>> - break;
>> - }
>> -
>> - return error;
>> - }
>> -
>> - void
>> - OptionParsingStarting () override
>> - {
>> - m_category_regex = "";
>> - }
>> -
>> - const OptionDefinition*
>> - GetDefinitions () override
>> - {
>> - return g_option_table;
>> - }
>> -
>> - // Options table: Required for subclasses of Options.
>> -
>> - static OptionDefinition g_option_table[];
>> -
>> - // Instance variables to hold the values for command options.
>> -
>> - std::string m_category_regex;
>> -
>> - };
>> -
>> - CommandOptions m_options;
>> -
>> - Options *
>> - GetOptions () override
>> - {
>> - return &m_options;
>> - }
>> -
>> public:
>> - CommandObjectTypeSynthList (CommandInterpreter &interpreter) :
>> - CommandObjectParsed (interpreter,
>> - "type synthetic list",
>> - "Show a list of current synthetic
>> providers.",
>> - NULL),
>> - m_options(interpreter)
>> - {
>> - CommandArgumentEntry type_arg;
>> - CommandArgumentData type_style_arg;
>> -
>> - type_style_arg.arg_type = eArgTypeName;
>> - type_style_arg.arg_repetition = eArgRepeatOptional;
>> -
>> - type_arg.push_back (type_style_arg);
>> -
>> - m_arguments.push_back (type_arg);
>> - }
>> -
>> - ~CommandObjectTypeSynthList () override
>> - {
>> - }
>> -
>> -protected:
>> - bool
>> - DoExecute (Args& command, CommandReturnObject &result) override
>> - {
>> - const size_t argc = command.GetArgumentCount();
>> -
>> - CommandObjectTypeSynthList_LoopCallbackParam *param;
>> - RegularExpression* cate_regex =
>> - m_options.m_category_regex.empty() ? NULL :
>> - new RegularExpression(m_options.m_category_regex.c_str());
>> -
>> - if (argc == 1)
>> - {
>> - RegularExpression* regex = new
>> RegularExpression(command.GetArgumentAtIndex(0));
>> - regex->Compile(command.GetArgumentAtIndex(0));
>> - param = new
>> CommandObjectTypeSynthList_LoopCallbackParam(this,&result,regex,cate_regex);
>> - }
>> - else
>> - param = new
>> CommandObjectTypeSynthList_LoopCallbackParam(this,&result,NULL,cate_regex);
>> -
>> -
>> DataVisualization::Categories::LoopThrough(PerCategoryCallback,param);
>> - delete param;
>> -
>> - if (cate_regex)
>> - delete cate_regex;
>> -
>> - result.SetStatus(eReturnStatusSuccessFinishResult);
>> - return result.Succeeded();
>> - }
>> -
>> -private:
>>
>> - static bool
>> - PerCategoryCallback(void* param_vp,
>> - const lldb::TypeCategoryImplSP& cate)
>> - {
>> -
>> - CommandObjectTypeSynthList_LoopCallbackParam* param =
>> - (CommandObjectTypeSynthList_LoopCallbackParam*)param_vp;
>> - CommandReturnObject* result = param->result;
>> -
>> - const char* cate_name = cate->GetName();
>> -
>> - // if the category is disabled or empty and there is no regex,
>> just skip it
>> - if ((cate->IsEnabled() == false ||
>> cate->GetCount(eFormatCategoryItemSynth | eFormatCategoryItemRegexSynth) ==
>> 0) && param->cate_regex == NULL)
>> - return true;
>> -
>> - // if we have a regex and this category does not match it, just
>> skip it
>> - if(param->cate_regex != NULL &&
>> strcmp(cate_name,param->cate_regex->GetText()) != 0 &&
>> param->cate_regex->Execute(cate_name) == false)
>> - return true;
>> -
>> -
>> result->GetOutputStream().Printf("-----------------------\nCategory:
>> %s\n-----------------------\n", cate->GetDescription().c_str());
>> -
>> -
>> cate->GetTypeSyntheticsContainer()->LoopThrough(CommandObjectTypeSynthList_LoopCallback,
>> param_vp);
>> -
>> - if (cate->GetRegexTypeSyntheticsContainer()->GetCount() > 0)
>> - {
>> - result->GetOutputStream().Printf("Regex-based synthetic
>> providers (slower):\n");
>> - cate->GetRegexTypeSyntheticsContainer()->LoopThrough(Co
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20151118/1e6c2bd5/attachment-0001.html>
More information about the lldb-commits
mailing list