Author: enrico Date: Sat Nov 14 12:44:37 2015 New Revision: 253140 URL: http://llvm.org/viewvc/llvm-project?rev=253140&view=rev Log: Uniquify all the type X delete commands via one common base class
This removes a lot of code, which is A Good Thing(TM) Modified: lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-cpp/TestDataFormatterCpp.py lldb/trunk/source/Commands/CommandObjectType.cpp Modified: lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-cpp/TestDataFormatterCpp.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-cpp/TestDataFormatterCpp.py?rev=253140&r1=253139&r2=253140&view=diff ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-cpp/TestDataFormatterCpp.py (original) +++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-cpp/TestDataFormatterCpp.py Sat Nov 14 12:44:37 2015 @@ -84,7 +84,7 @@ class CppDataFormatterTestCase(TestBase) # Delete type format for 'Speed', we should expect an error message. self.expect("type format delete Speed", error=True, - substrs = ['no custom format for Speed']) + substrs = ['no custom formatter for Speed']) self.runCmd("type summary add --summary-string \"arr = ${var%s}\" -x \"char \\[[0-9]+\\]\" -v") Modified: lldb/trunk/source/Commands/CommandObjectType.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectType.cpp?rev=253140&r1=253139&r2=253140&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectType.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectType.cpp Sat Nov 14 12:44:37 2015 @@ -906,14 +906,9 @@ CommandObjectTypeFormatAdd::CommandOptio return sizeof(g_option_table) / sizeof (OptionDefinition); } - -//------------------------------------------------------------------------- -// CommandObjectTypeFormatDelete -//------------------------------------------------------------------------- - -class CommandObjectTypeFormatDelete : public CommandObjectParsed +class CommandObjectTypeFormatterDelete : public CommandObjectParsed { -private: +protected: class CommandOptions : public Options { public: @@ -976,6 +971,7 @@ private: }; CommandOptions m_options; + uint32_t m_formatter_kind_mask; Options * GetOptions () override @@ -984,12 +980,16 @@ private: } public: - CommandObjectTypeFormatDelete (CommandInterpreter &interpreter) : - CommandObjectParsed (interpreter, - "type format delete", - "Delete an existing formatting style for a type.", - NULL), - m_options(interpreter) + CommandObjectTypeFormatterDelete (CommandInterpreter &interpreter, + uint32_t formatter_kind_mask, + const char* name, + const char* help) : + CommandObjectParsed (interpreter, + name, + help, + NULL), + m_options(interpreter), + m_formatter_kind_mask(formatter_kind_mask) { CommandArgumentEntry type_arg; CommandArgumentData type_style_arg; @@ -1003,11 +1003,15 @@ public: } - ~CommandObjectTypeFormatDelete () override + ~CommandObjectTypeFormatterDelete () override = default; + +protected: + virtual bool + FormatterSpecificDeletion (ConstString typeCS) { + return false; } -protected: bool DoExecute (Args& command, CommandReturnObject &result) override { @@ -1032,8 +1036,8 @@ protected: if (m_options.m_delete_all) { - DataVisualization::Categories::ForEach( [typeCS] (const lldb::TypeCategoryImplSP& category_sp) -> bool { - category_sp->Delete(typeCS, eFormatCategoryItemValue | eFormatCategoryItemRegexValue); + DataVisualization::Categories::ForEach( [this, typeCS] (const lldb::TypeCategoryImplSP& category_sp) -> bool { + category_sp->Delete(typeCS, m_formatter_kind_mask); return true; }); result.SetStatus(eReturnStatusSuccessFinishNoResult); @@ -1041,30 +1045,33 @@ protected: } bool delete_category = false; + bool extra_deletion = false; if (m_options.m_language != lldb::eLanguageTypeUnknown) { lldb::TypeCategoryImplSP category; DataVisualization::Categories::GetCategory(m_options.m_language, category); if (category) - delete_category = category->Delete(typeCS, eFormatCategoryItemValue | eFormatCategoryItemRegexValue); + delete_category = category->Delete(typeCS, m_formatter_kind_mask); + extra_deletion = FormatterSpecificDeletion(typeCS); } else { lldb::TypeCategoryImplSP category; DataVisualization::Categories::GetCategory(ConstString(m_options.m_category.c_str()), category); if (category) - delete_category = category->Delete(typeCS, eFormatCategoryItemValue | eFormatCategoryItemRegexValue); + delete_category = category->Delete(typeCS, m_formatter_kind_mask); + extra_deletion = FormatterSpecificDeletion(typeCS); } - if (delete_category) + if (delete_category || extra_deletion) { result.SetStatus(eReturnStatusSuccessFinishNoResult); return result.Succeeded(); } else { - result.AppendErrorWithFormat ("no custom format for %s.\n", typeA); + result.AppendErrorWithFormat ("no custom formatter for %s.\n", typeA); result.SetStatus(eReturnStatusFailed); return false; } @@ -1074,7 +1081,7 @@ protected: }; OptionDefinition -CommandObjectTypeFormatDelete::CommandOptions::g_option_table[] = +CommandObjectTypeFormatterDelete::CommandOptions::g_option_table[] = { { LLDB_OPT_SET_1, false, "all", 'a', OptionParser::eNoArgument, NULL, NULL, 0, eArgTypeNone, "Delete from every category."}, { LLDB_OPT_SET_2, false, "category", 'w', OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeName, "Delete from given category."}, @@ -1082,6 +1089,31 @@ CommandObjectTypeFormatDelete::CommandOp { 0, false, NULL, 0, 0, NULL, NULL, 0, eArgTypeNone, NULL } }; + + + + + +//------------------------------------------------------------------------- +// CommandObjectTypeFormatDelete +//------------------------------------------------------------------------- + +class CommandObjectTypeFormatDelete : public CommandObjectTypeFormatterDelete +{ +public: + CommandObjectTypeFormatDelete (CommandInterpreter &interpreter) : + CommandObjectTypeFormatterDelete (interpreter, + eFormatCategoryItemValue | eFormatCategoryItemRegexValue, + "type format delete", + "Delete an existing formatting style for a type.") + { + } + + ~CommandObjectTypeFormatDelete () override + { + } +}; + //------------------------------------------------------------------------- // CommandObjectTypeFormatClear //------------------------------------------------------------------------- @@ -1936,96 +1968,15 @@ CommandObjectTypeSummaryAdd::CommandOpti // CommandObjectTypeSummaryDelete //------------------------------------------------------------------------- -class CommandObjectTypeSummaryDelete : public CommandObjectParsed +class CommandObjectTypeSummaryDelete : public CommandObjectTypeFormatterDelete { -private: - 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 'a': - m_delete_all = true; - break; - case 'w': - m_category = std::string(option_arg); - break; - case 'l': - m_language = Language::GetLanguageTypeFromString(option_arg); - break; - default: - error.SetErrorStringWithFormat ("unrecognized option '%c'", short_option); - break; - } - - return error; - } - - void - OptionParsingStarting () override - { - m_delete_all = false; - m_category = "default"; - m_language = lldb::eLanguageTypeUnknown; - } - - 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. - - bool m_delete_all; - std::string m_category; - lldb::LanguageType m_language; - }; - - CommandOptions m_options; - - Options * - GetOptions () override - { - return &m_options; - } - public: CommandObjectTypeSummaryDelete (CommandInterpreter &interpreter) : - CommandObjectParsed (interpreter, - "type summary delete", - "Delete an existing summary style for a type.", - NULL), - m_options(interpreter) + CommandObjectTypeFormatterDelete (interpreter, + eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary, + "type summary delete", + "Delete an existing summary for a type.") { - CommandArgumentEntry type_arg; - CommandArgumentData type_style_arg; - - type_style_arg.arg_type = eArgTypeName; - type_style_arg.arg_repetition = eArgRepeatPlain; - - type_arg.push_back (type_style_arg); - - m_arguments.push_back (type_arg); - } ~CommandObjectTypeSummaryDelete () override @@ -2034,80 +1985,14 @@ public: protected: bool - DoExecute (Args& command, CommandReturnObject &result) override + FormatterSpecificDeletion (ConstString typeCS) override { - const size_t argc = command.GetArgumentCount(); - - if (argc != 1) - { - result.AppendErrorWithFormat ("%s takes 1 arg.\n", m_cmd_name.c_str()); - result.SetStatus(eReturnStatusFailed); - return false; - } - - const char* typeA = command.GetArgumentAtIndex(0); - ConstString typeCS(typeA); - - if (!typeCS) - { - result.AppendError("empty typenames not allowed"); - result.SetStatus(eReturnStatusFailed); - return false; - } - - if (m_options.m_delete_all) - { - DataVisualization::Categories::ForEach( [typeCS] (const lldb::TypeCategoryImplSP& category_sp) -> bool { - category_sp->Delete(typeCS, eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary); - return true; - }); - result.SetStatus(eReturnStatusSuccessFinishNoResult); - return result.Succeeded(); - } - - bool delete_category = false; - bool delete_named = false; - if (m_options.m_language != lldb::eLanguageTypeUnknown) - { - lldb::TypeCategoryImplSP category; - DataVisualization::Categories::GetCategory(m_options.m_language, category); - if (category) - delete_category = category->Delete(typeCS, eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary); - } - else - { - lldb::TypeCategoryImplSP category; - DataVisualization::Categories::GetCategory(ConstString(m_options.m_category.c_str()), category); - if (category) - delete_category = category->Delete(typeCS, eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary); - delete_named = DataVisualization::NamedSummaryFormats::Delete(typeCS); - } - - if (delete_category || delete_named) - { - result.SetStatus(eReturnStatusSuccessFinishNoResult); - return result.Succeeded(); - } - else - { - result.AppendErrorWithFormat ("no custom summary for %s.\n", typeA); - result.SetStatus(eReturnStatusFailed); return false; - } - + return DataVisualization::NamedSummaryFormats::Delete(typeCS); } }; -OptionDefinition -CommandObjectTypeSummaryDelete::CommandOptions::g_option_table[] = -{ - { LLDB_OPT_SET_1, false, "all", 'a', OptionParser::eNoArgument, NULL, NULL, 0, eArgTypeNone, "Delete from every category."}, - { LLDB_OPT_SET_2, false, "category", 'w', OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeName, "Delete from given category."}, - { LLDB_OPT_SET_3, false, "language", 'l', OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeLanguage, "Delete from given language's category."}, - { 0, false, NULL, 0, 0, NULL, NULL, 0, eArgTypeNone, NULL } -}; - class CommandObjectTypeSummaryClear : public CommandObjectParsed { private: @@ -3483,173 +3368,20 @@ CommandObjectTypeSynthList::CommandOptio // CommandObjectTypeFilterDelete //------------------------------------------------------------------------- -class CommandObjectTypeFilterDelete : public CommandObjectParsed +class CommandObjectTypeFilterDelete : public CommandObjectTypeFormatterDelete { -private: - 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 'a': - m_delete_all = true; - break; - case 'w': - m_category = std::string(option_arg); - break; - case 'l': - m_language = Language::GetLanguageTypeFromString(option_arg); - break; - default: - error.SetErrorStringWithFormat ("unrecognized option '%c'", short_option); - break; - } - - return error; - } - - void - OptionParsingStarting () override - { - m_delete_all = false; - m_category = "default"; - m_language = lldb::eLanguageTypeUnknown; - } - - 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. - - bool m_delete_all; - std::string m_category; - lldb::LanguageType m_language; - }; - - CommandOptions m_options; - - Options * - GetOptions () override - { - return &m_options; - } - public: CommandObjectTypeFilterDelete (CommandInterpreter &interpreter) : - CommandObjectParsed (interpreter, - "type filter delete", - "Delete an existing filter for a type.", - NULL), - m_options(interpreter) + CommandObjectTypeFormatterDelete (interpreter, + eFormatCategoryItemFilter | eFormatCategoryItemRegexFilter, + "type filter delete", + "Delete an existing filter for a type.") { - CommandArgumentEntry type_arg; - CommandArgumentData type_style_arg; - - type_style_arg.arg_type = eArgTypeName; - type_style_arg.arg_repetition = eArgRepeatPlain; - - type_arg.push_back (type_style_arg); - - m_arguments.push_back (type_arg); - } ~CommandObjectTypeFilterDelete () override { } - -protected: - bool - DoExecute (Args& command, CommandReturnObject &result) override - { - const size_t argc = command.GetArgumentCount(); - - if (argc != 1) - { - result.AppendErrorWithFormat ("%s takes 1 arg.\n", m_cmd_name.c_str()); - result.SetStatus(eReturnStatusFailed); - return false; - } - - const char* typeA = command.GetArgumentAtIndex(0); - ConstString typeCS(typeA); - - if (!typeCS) - { - result.AppendError("empty typenames not allowed"); - result.SetStatus(eReturnStatusFailed); - return false; - } - - if (m_options.m_delete_all) - { - DataVisualization::Categories::ForEach( [typeCS] (const lldb::TypeCategoryImplSP& category_sp) -> bool { - category_sp->Delete(typeCS, eFormatCategoryItemFilter | eFormatCategoryItemRegexFilter); - return true; - }); - result.SetStatus(eReturnStatusSuccessFinishNoResult); - return result.Succeeded(); - } - - bool delete_category = false; - - if (m_options.m_language != lldb::eLanguageTypeUnknown) - { - lldb::TypeCategoryImplSP category; - DataVisualization::Categories::GetCategory(m_options.m_language, category); - if (category) - delete_category = category->Delete(typeCS, eFormatCategoryItemFilter | eFormatCategoryItemRegexFilter); - } - else - { - lldb::TypeCategoryImplSP category; - DataVisualization::Categories::GetCategory(ConstString(m_options.m_category.c_str()), category); - if (category) - delete_category = category->Delete(typeCS, eFormatCategoryItemFilter | eFormatCategoryItemRegexFilter); - } - - if (delete_category) - { - result.SetStatus(eReturnStatusSuccessFinishNoResult); - return result.Succeeded(); - } - else - { - result.AppendErrorWithFormat ("no custom filter for %s.\n", typeA); - result.SetStatus(eReturnStatusFailed); - return false; - } - } -}; - -OptionDefinition -CommandObjectTypeFilterDelete::CommandOptions::g_option_table[] = -{ - { LLDB_OPT_SET_1, false, "all", 'a', OptionParser::eNoArgument, NULL, NULL, 0, eArgTypeNone, "Delete from every category."}, - { LLDB_OPT_SET_2, false, "category", 'w', OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeName, "Delete from given category."}, - { LLDB_OPT_SET_3, false, "language", 'l', OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeLanguage, "Delete from given language's category."}, - { 0, false, NULL, 0, 0, NULL, NULL, 0, eArgTypeNone, NULL } }; #ifndef LLDB_DISABLE_PYTHON @@ -3658,173 +3390,20 @@ CommandObjectTypeFilterDelete::CommandOp // CommandObjectTypeSynthDelete //------------------------------------------------------------------------- -class CommandObjectTypeSynthDelete : public CommandObjectParsed +class CommandObjectTypeSynthDelete : public CommandObjectTypeFormatterDelete { -private: - 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 'a': - m_delete_all = true; - break; - case 'w': - m_category = std::string(option_arg); - break; - case 'l': - m_language = Language::GetLanguageTypeFromString(option_arg); - break; - default: - error.SetErrorStringWithFormat ("unrecognized option '%c'", short_option); - break; - } - - return error; - } - - void - OptionParsingStarting () override - { - m_delete_all = false; - m_category = "default"; - m_language = lldb::eLanguageTypeUnknown; - } - - 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. - - bool m_delete_all; - std::string m_category; - lldb::LanguageType m_language; - }; - - CommandOptions m_options; - - Options * - GetOptions () override - { - return &m_options; - } - public: CommandObjectTypeSynthDelete (CommandInterpreter &interpreter) : - CommandObjectParsed (interpreter, - "type synthetic delete", - "Delete an existing synthetic provider for a type.", - NULL), - m_options(interpreter) + CommandObjectTypeFormatterDelete (interpreter, + eFormatCategoryItemSynth | eFormatCategoryItemRegexSynth, + "type synthetic delete", + "Delete an existing synthetic provider for a type.") { - CommandArgumentEntry type_arg; - CommandArgumentData type_style_arg; - - type_style_arg.arg_type = eArgTypeName; - type_style_arg.arg_repetition = eArgRepeatPlain; - - type_arg.push_back (type_style_arg); - - m_arguments.push_back (type_arg); - } ~CommandObjectTypeSynthDelete () override { } - -protected: - bool - DoExecute (Args& command, CommandReturnObject &result) override - { - const size_t argc = command.GetArgumentCount(); - - if (argc != 1) - { - result.AppendErrorWithFormat ("%s takes 1 arg.\n", m_cmd_name.c_str()); - result.SetStatus(eReturnStatusFailed); - return false; - } - - const char* typeA = command.GetArgumentAtIndex(0); - ConstString typeCS(typeA); - - if (!typeCS) - { - result.AppendError("empty typenames not allowed"); - result.SetStatus(eReturnStatusFailed); - return false; - } - - if (m_options.m_delete_all) - { - DataVisualization::Categories::ForEach( [typeCS] (const lldb::TypeCategoryImplSP& category_sp) -> bool { - category_sp->Delete(typeCS, eFormatCategoryItemSynth | eFormatCategoryItemRegexSynth); - return true; - }); - result.SetStatus(eReturnStatusSuccessFinishNoResult); - return result.Succeeded(); - } - - bool delete_category = false; - - if (m_options.m_language != lldb::eLanguageTypeUnknown) - { - lldb::TypeCategoryImplSP category; - DataVisualization::Categories::GetCategory(m_options.m_language, category); - if (category) - delete_category = category->Delete(typeCS, eFormatCategoryItemSynth | eFormatCategoryItemRegexSynth); - } - else - { - lldb::TypeCategoryImplSP category; - DataVisualization::Categories::GetCategory(ConstString(m_options.m_category.c_str()), category); - if (category) - delete_category = category->Delete(typeCS, eFormatCategoryItemSynth | eFormatCategoryItemRegexSynth); - } - - if (delete_category) - { - result.SetStatus(eReturnStatusSuccessFinishNoResult); - return result.Succeeded(); - } - else - { - result.AppendErrorWithFormat ("no custom synthetic provider for %s.\n", typeA); - result.SetStatus(eReturnStatusFailed); - return false; - } - } -}; - -OptionDefinition -CommandObjectTypeSynthDelete::CommandOptions::g_option_table[] = -{ - { LLDB_OPT_SET_1, false, "all", 'a', OptionParser::eNoArgument, NULL, NULL, 0, eArgTypeNone, "Delete from every category."}, - { LLDB_OPT_SET_2, false, "category", 'w', OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeName, "Delete from given category."}, - { LLDB_OPT_SET_3, false, "language", 'l', OptionParser::eRequiredArgument, NULL, NULL, 0, eArgTypeLanguage, "Delete from given language's category."}, - { 0, false, NULL, 0, 0, NULL, NULL, 0, eArgTypeNone, NULL } }; #endif // #ifndef LLDB_DISABLE_PYTHON _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits