[Lldb-commits] [PATCH] D137662: Make aliases from a raw command that isn't a top-level command work
Jim Ingham via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Wed Nov 9 10:14:46 PST 2022
This revision was automatically updated to reflect the committed changes.
Closed by commit rGd518ed42ae85: Handle aliasing a non-top-level command. (authored by jingham).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D137662/new/
https://reviews.llvm.org/D137662
Files:
lldb/include/lldb/Interpreter/CommandObject.h
lldb/source/Commands/CommandObjectCommands.cpp
lldb/test/API/commands/command/container/TestContainerCommands.py
Index: lldb/test/API/commands/command/container/TestContainerCommands.py
===================================================================
--- lldb/test/API/commands/command/container/TestContainerCommands.py
+++ lldb/test/API/commands/command/container/TestContainerCommands.py
@@ -55,6 +55,12 @@
self.expect("test-multi test-multi-sub welcome friend", "Test command works",
substrs=["Hello friend, welcome to LLDB"])
+ # Make sure we can make an alias to this:
+ self.runCmd("command alias my-welcome test-multi test-multi-sub welcome", "We can make an alias to multi-word")
+ self.expect("my-welcome friend", "Test command works",
+ substrs=["Hello friend, welcome to LLDB"])
+ self.runCmd("command unalias my-welcome")
+
# Make sure overwriting works on the leaf command. First using the
# explicit option so we should not be able to remove extant commands by default:
Index: lldb/source/Commands/CommandObjectCommands.cpp
===================================================================
--- lldb/source/Commands/CommandObjectCommands.cpp
+++ lldb/source/Commands/CommandObjectCommands.cpp
@@ -485,29 +485,31 @@
OptionArgVectorSP(new OptionArgVector);
const bool include_aliases = true;
- if (CommandObjectSP cmd_obj_sp = m_interpreter.GetCommandSPExact(
- cmd_obj.GetCommandName(), include_aliases)) {
- if (m_interpreter.AliasExists(alias_command) ||
- m_interpreter.UserCommandExists(alias_command)) {
- result.AppendWarningWithFormat(
- "Overwriting existing definition for '%s'.\n",
- alias_command.str().c_str());
- }
- if (CommandAlias *alias = m_interpreter.AddAlias(
- alias_command, cmd_obj_sp, raw_command_string)) {
- if (m_command_options.m_help.OptionWasSet())
- alias->SetHelp(m_command_options.m_help.GetCurrentValue());
- if (m_command_options.m_long_help.OptionWasSet())
- alias->SetHelpLong(m_command_options.m_long_help.GetCurrentValue());
- result.SetStatus(eReturnStatusSuccessFinishNoResult);
- } else {
- result.AppendError("Unable to create requested alias.\n");
- }
+ // Look up the command using command's name first. This is to resolve
+ // aliases when you are making nested aliases. But if you don't find
+ // it that way, then it wasn't an alias and we can just use the object
+ // we were passed in.
+ CommandObjectSP cmd_obj_sp = m_interpreter.GetCommandSPExact(
+ cmd_obj.GetCommandName(), include_aliases);
+ if (!cmd_obj_sp)
+ cmd_obj_sp = cmd_obj.shared_from_this();
+ if (m_interpreter.AliasExists(alias_command) ||
+ m_interpreter.UserCommandExists(alias_command)) {
+ result.AppendWarningWithFormat(
+ "Overwriting existing definition for '%s'.\n",
+ alias_command.str().c_str());
+ }
+ if (CommandAlias *alias = m_interpreter.AddAlias(
+ alias_command, cmd_obj_sp, raw_command_string)) {
+ if (m_command_options.m_help.OptionWasSet())
+ alias->SetHelp(m_command_options.m_help.GetCurrentValue());
+ if (m_command_options.m_long_help.OptionWasSet())
+ alias->SetHelpLong(m_command_options.m_long_help.GetCurrentValue());
+ result.SetStatus(eReturnStatusSuccessFinishNoResult);
} else {
result.AppendError("Unable to create requested alias.\n");
}
-
return result.Succeeded();
}
Index: lldb/include/lldb/Interpreter/CommandObject.h
===================================================================
--- lldb/include/lldb/Interpreter/CommandObject.h
+++ lldb/include/lldb/Interpreter/CommandObject.h
@@ -10,6 +10,7 @@
#define LLDB_INTERPRETER_COMMANDOBJECT_H
#include <map>
+#include <memory>
#include <string>
#include <vector>
@@ -64,7 +65,7 @@
return max_len;
}
-class CommandObject {
+class CommandObject : public std::enable_shared_from_this<CommandObject> {
public:
typedef llvm::StringRef(ArgumentHelpCallbackFunction)();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D137662.474302.patch
Type: text/x-patch
Size: 4101 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20221109/d2e2b429/attachment.bin>
More information about the lldb-commits
mailing list