From 3c110dd6b40dff4e46b391878112a874e03f12a6 Mon Sep 17 00:00:00 2001 From: Enrico Granata Date: Fri, 25 Mar 2016 21:59:06 +0000 Subject: [PATCH] Fix an issue with nested aliases where the help system wouldn't correctly track the fact that an alias is an alias to a dash-dash alias (and I hope I typed the word 'alias' enough times in this commit message :-) llvm-svn: 264468 --- lldb/include/lldb/Interpreter/CommandAlias.h | 4 ++++ .../test/functionalities/nested_alias/TestNestedAlias.py | 8 ++++++++ lldb/source/Interpreter/CommandAlias.cpp | 11 +++++++++++ 3 files changed, 23 insertions(+) diff --git a/lldb/include/lldb/Interpreter/CommandAlias.h b/lldb/include/lldb/Interpreter/CommandAlias.h index f14ac52..d48719f 100644 --- a/lldb/include/lldb/Interpreter/CommandAlias.h +++ b/lldb/include/lldb/Interpreter/CommandAlias.h @@ -106,6 +106,10 @@ public: std::pair Desugar (); +protected: + bool + IsNestedAlias (); + private: lldb::CommandObjectSP m_underlying_command_sp; std::string m_option_string; diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/nested_alias/TestNestedAlias.py b/lldb/packages/Python/lldbsuite/test/functionalities/nested_alias/TestNestedAlias.py index fb3a18e..16ee2e5 100644 --- a/lldb/packages/Python/lldbsuite/test/functionalities/nested_alias/TestNestedAlias.py +++ b/lldb/packages/Python/lldbsuite/test/functionalities/nested_alias/TestNestedAlias.py @@ -46,6 +46,8 @@ class NestedAliasTestCase(TestBase): def cleanup(): self.runCmd('command unalias read', check=False) self.runCmd('command unalias rd', check=False) + self.runCmd('command unalias fo', check=False) + self.runCmd('command unalias foself', check=False) # Execute the cleanup function during test case tear down. self.addTearDownHook(cleanup) @@ -58,3 +60,9 @@ class NestedAliasTestCase(TestBase): self.expect('memory read -f A -c 3 `&my_ptr[0]`', substrs=['deadfeed'], matching=False) self.expect('rd `&my_ptr[0]`', substrs=['deadfeed'], matching=False) + + self.runCmd('command alias fo frame variable -O --') + self.runCmd('command alias foself fo self') + + self.expect('help foself', substrs=['--show-all-children', '--raw-output'], matching=False) + self.expect('help foself', substrs=['Show frame variables.'], matching=True) diff --git a/lldb/source/Interpreter/CommandAlias.cpp b/lldb/source/Interpreter/CommandAlias.cpp index f7d8e8e..a915d63 100644 --- a/lldb/source/Interpreter/CommandAlias.cpp +++ b/lldb/source/Interpreter/CommandAlias.cpp @@ -236,11 +236,22 @@ CommandAlias::IsDashDashCommand () break; } } + // if this is a nested alias, it may be adding arguments on top of an already dash-dash alias + if ((m_is_dashdash_alias == eLazyBoolNo) && IsNestedAlias()) + m_is_dashdash_alias = (GetUnderlyingCommand()->IsDashDashCommand() ? eLazyBoolYes : eLazyBoolNo); } } return (m_is_dashdash_alias == eLazyBoolYes); } +bool +CommandAlias::IsNestedAlias () +{ + if (GetUnderlyingCommand()) + return GetUnderlyingCommand()->IsAlias(); + return false; +} + std::pair CommandAlias::Desugar () { -- 2.7.4