diff options
-rw-r--r-- | lldb/source/Commands/CommandObjectType.cpp | 63 | ||||
-rw-r--r-- | lldb/test/functionalities/data-formatter/data-formatter-advanced/TestDataFormatterAdv.py | 10 |
2 files changed, 62 insertions, 11 deletions
diff --git a/lldb/source/Commands/CommandObjectType.cpp b/lldb/source/Commands/CommandObjectType.cpp index 4e89e813c73..e69620e0472 100644 --- a/lldb/source/Commands/CommandObjectType.cpp +++ b/lldb/source/Commands/CommandObjectType.cpp @@ -179,7 +179,7 @@ public: } static bool - AddSummary(const ConstString& type_name, + AddSummary(ConstString type_name, lldb::TypeSummaryImplSP entry, SummaryFormatType type, std::string category, @@ -324,7 +324,7 @@ public: } static bool - AddSynth(const ConstString& type_name, + AddSynth(ConstString type_name, lldb::SyntheticChildrenSP entry, SynthFormatType type, std::string category_name, @@ -1340,7 +1340,7 @@ CommandObjectTypeSummaryAdd::DoExecute (Args& command, CommandReturnObject &resu } bool -CommandObjectTypeSummaryAdd::AddSummary(const ConstString& type_name, +CommandObjectTypeSummaryAdd::AddSummary(ConstString type_name, TypeSummaryImplSP entry, SummaryFormatType type, std::string category_name, @@ -1349,6 +1349,21 @@ CommandObjectTypeSummaryAdd::AddSummary(const ConstString& type_name, lldb::TypeCategoryImplSP category; DataVisualization::Categories::GetCategory(ConstString(category_name.c_str()), category); + if (type == eRegularSummary) + { + std::string type_name_str(type_name.GetCString()); + if (type_name_str.compare(type_name_str.length() - 2, 2, "[]") == 0) + { + type_name_str.resize(type_name_str.length()-2); + if (type_name_str.back() != ' ') + type_name_str.append(" \\[[0-9]+\\]"); + else + type_name_str.append("\\[[0-9]+\\]"); + type_name.SetCString(type_name_str.c_str()); + type = eRegexSummary; + } + } + if (type == eRegexSummary) { RegularExpressionSP typeRX(new RegularExpression()); @@ -3575,15 +3590,30 @@ CommandObjectTypeSynthAdd::CommandObjectTypeSynthAdd (CommandInterpreter &interp } bool -CommandObjectTypeSynthAdd::AddSynth(const ConstString& type_name, - SyntheticChildrenSP entry, - SynthFormatType type, - std::string category_name, - Error* error) +CommandObjectTypeSynthAdd::AddSynth(ConstString type_name, + SyntheticChildrenSP entry, + SynthFormatType type, + std::string category_name, + Error* error) { lldb::TypeCategoryImplSP category; DataVisualization::Categories::GetCategory(ConstString(category_name.c_str()), category); + if (type == eRegularSynth) + { + std::string type_name_str(type_name.GetCString()); + if (type_name_str.compare(type_name_str.length() - 2, 2, "[]") == 0) + { + type_name_str.resize(type_name_str.length()-2); + if (type_name_str.back() != ' ') + type_name_str.append(" \\[[0-9]+\\]"); + else + type_name_str.append("\\[[0-9]+\\]"); + type_name.SetCString(type_name_str.c_str()); + type = eRegularSynth; + } + } + if (category->AnyMatches(type_name, eFormatCategoryItemFilter | eFormatCategoryItemRegexFilter, false)) @@ -3754,7 +3784,7 @@ private: }; bool - AddFilter(const ConstString& type_name, + AddFilter(ConstString type_name, SyntheticChildrenSP entry, FilterFormatType type, std::string category_name, @@ -3763,6 +3793,21 @@ private: lldb::TypeCategoryImplSP category; DataVisualization::Categories::GetCategory(ConstString(category_name.c_str()), category); + if (type == eRegularFilter) + { + std::string type_name_str(type_name.GetCString()); + if (type_name_str.compare(type_name_str.length() - 2, 2, "[]") == 0) + { + type_name_str.resize(type_name_str.length()-2); + if (type_name_str.back() != ' ') + type_name_str.append(" \\[[0-9]+\\]"); + else + type_name_str.append("\\[[0-9]+\\]"); + type_name.SetCString(type_name_str.c_str()); + type = eRegexFilter; + } + } + if (category->AnyMatches(type_name, eFormatCategoryItemSynth | eFormatCategoryItemRegexSynth, false)) diff --git a/lldb/test/functionalities/data-formatter/data-formatter-advanced/TestDataFormatterAdv.py b/lldb/test/functionalities/data-formatter/data-formatter-advanced/TestDataFormatterAdv.py index 15596b316bc..9feffbe3f04 100644 --- a/lldb/test/functionalities/data-formatter/data-formatter-advanced/TestDataFormatterAdv.py +++ b/lldb/test/functionalities/data-formatter/data-formatter-advanced/TestDataFormatterAdv.py @@ -77,7 +77,8 @@ class AdvDataFormatterTestCase(TestBase): self.expect("frame variable int_array", substrs = ['1,2,3,4,5']) - self.runCmd("type summary add --summary-string \"${var[].integer}\" -x \"i_am_cool \\[[0-9]\\]") + # this will fail if we don't do [] as regex correctly + self.runCmd('type summary add --summary-string "${var[].integer}" "i_am_cool[]') self.expect("frame variable cool_array", substrs = ['1,1,1,1,6']) @@ -122,7 +123,12 @@ class AdvDataFormatterTestCase(TestBase): self.runCmd("type summary clear") - self.runCmd("type summary add --summary-string \"${var[0-1]}\" -x \"int \[[0-9]\]\"") + self.runCmd('type summary add --summary-string \"${var[0-1]}\" -x \"int \[[0-9]\]\"') + + self.expect("frame variable int_array", + substrs = ['1,2']) + + self.runCmd('type summary add --summary-string \"${var[0-1]}\" "int []"') self.expect("frame variable int_array", substrs = ['1,2']) |