[Lldb-commits] [PATCH] D143695: [lldb] Make repeat commands work for regex commands
Dave Lee via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Tue Mar 7 13:17:00 PST 2023
kastiglione updated this revision to Diff 503142.
kastiglione added a comment.
Introduce new allow_repeat_command parameter
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D143695/new/
https://reviews.llvm.org/D143695
Files:
lldb/include/lldb/Interpreter/CommandInterpreter.h
lldb/source/Commands/CommandObjectRegexCommand.cpp
lldb/source/Interpreter/CommandInterpreter.cpp
lldb/test/API/functionalities/alias/TestBtAliasRepeat.py
Index: lldb/test/API/functionalities/alias/TestBtAliasRepeat.py
===================================================================
--- /dev/null
+++ lldb/test/API/functionalities/alias/TestBtAliasRepeat.py
@@ -0,0 +1,19 @@
+import lldb
+from lldbsuite.test.lldbtest import TestBase
+from lldbsuite.test import lldbutil
+
+
+class TestCase(TestBase):
+ def test(self):
+ self.build()
+ lldbutil.run_to_source_breakpoint(self, "return", lldb.SBFileSpec("main.c"))
+
+ # Expect "frame #0" but not "frame #1".
+ self.expect("bt 1", inHistory=True, patterns=["frame #0", "^(?!.*frame #1)"])
+
+ # Run an empty command to run the repeat command for `bt`.
+ # The repeat command for `bt N` lists the subsequent N frames.
+ #
+ # In this case, after printing the frame 0 with `bt 1`, the repeat
+ # command will print "frame #1" (and won't print "frame #0").
+ self.expect("", patterns=["^(?!.*frame #0)", "frame #1"])
Index: lldb/source/Interpreter/CommandInterpreter.cpp
===================================================================
--- lldb/source/Interpreter/CommandInterpreter.cpp
+++ lldb/source/Interpreter/CommandInterpreter.cpp
@@ -1874,8 +1874,8 @@
bool CommandInterpreter::HandleCommand(const char *command_line,
LazyBool lazy_add_to_history,
- CommandReturnObject &result) {
-
+ CommandReturnObject &result,
+ bool allow_repeat_command) {
std::string command_string(command_line);
std::string original_command_string(command_line);
@@ -2007,14 +2007,16 @@
// If we got here when empty_command was true, then this command is a
// stored "repeat command" which we should give a chance to produce it's
// repeat command, even though we don't add repeat commands to the history.
- if (add_to_history || empty_command) {
+ if (add_to_history || empty_command || allow_repeat_command) {
Args command_args(command_string);
std::optional<std::string> repeat_command =
cmd_obj->GetRepeatCommand(command_args, 0);
- if (repeat_command)
+ if (repeat_command) {
+ LLDB_LOGF(log, "Repeat command: %s", repeat_command->data());
m_repeat_command.assign(*repeat_command);
- else
+ } else {
m_repeat_command.assign(original_command_string);
+ }
}
if (add_to_history)
Index: lldb/source/Commands/CommandObjectRegexCommand.cpp
===================================================================
--- lldb/source/Commands/CommandObjectRegexCommand.cpp
+++ lldb/source/Commands/CommandObjectRegexCommand.cpp
@@ -72,8 +72,9 @@
result.GetOutputStream().Printf("%s\n", new_command->c_str());
// We don't have to pass an override_context here, as the command that
// called us should have set up the context appropriately.
- return m_interpreter.HandleCommand(new_command->c_str(),
- eLazyBoolNo, result);
+ bool allow_repeat_command = true;
+ return m_interpreter.HandleCommand(new_command->c_str(), eLazyBoolNo,
+ result, allow_repeat_command);
}
}
result.SetStatus(eReturnStatusFailed);
Index: lldb/include/lldb/Interpreter/CommandInterpreter.h
===================================================================
--- lldb/include/lldb/Interpreter/CommandInterpreter.h
+++ lldb/include/lldb/Interpreter/CommandInterpreter.h
@@ -352,7 +352,8 @@
CommandReturnObject &result);
bool HandleCommand(const char *command_line, LazyBool add_to_history,
- CommandReturnObject &result);
+ CommandReturnObject &result,
+ bool allow_repeat_command = false);
bool WasInterrupted() const;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D143695.503142.patch
Type: text/x-patch
Size: 3931 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20230307/c36e2a7c/attachment.bin>
More information about the lldb-commits
mailing list