[Lldb-commits] [lldb] 8cc8b36 - CommandObjectRegexCommand shouldn't put two commands on the history stack.

Jim Ingham via lldb-commits lldb-commits at lists.llvm.org
Fri Jun 3 11:35:10 PDT 2022


Author: Jim Ingham
Date: 2022-06-03T11:34:53-07:00
New Revision: 8cc8b36f24d6f3133c44e238a657309620eedc19

URL: https://github.com/llvm/llvm-project/commit/8cc8b36f24d6f3133c44e238a657309620eedc19
DIFF: https://github.com/llvm/llvm-project/commit/8cc8b36f24d6f3133c44e238a657309620eedc19.diff

LOG: CommandObjectRegexCommand shouldn't put two commands on the history stack.

It was putting the command the user typed, and then the resolved command in the
command history.  That caused up-arrow not to work correctly when the regex command
was invoked from a Python-command.  Plus it's just weird.

Differential Revision: https://reviews.llvm.org/D126789

Added: 
    

Modified: 
    lldb/source/Commands/CommandObjectRegexCommand.cpp
    lldb/test/API/functionalities/history/TestHistoryRecall.py

Removed: 
    


################################################################################
diff  --git a/lldb/source/Commands/CommandObjectRegexCommand.cpp b/lldb/source/Commands/CommandObjectRegexCommand.cpp
index a99a9e760cb26..857193036e393 100644
--- a/lldb/source/Commands/CommandObjectRegexCommand.cpp
+++ b/lldb/source/Commands/CommandObjectRegexCommand.cpp
@@ -71,11 +71,10 @@ bool CommandObjectRegexCommand::DoExecute(llvm::StringRef command,
       // Interpret the new command and return this as the result!
       if (m_interpreter.GetExpandRegexAliases())
         result.GetOutputStream().Printf("%s\n", new_command->c_str());
-      // Pass in true for "no context switching".  The command that called us
-      // should have set up the context appropriately, we shouldn't have to
-      // redo that.
+      // 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(),
-                                         eLazyBoolCalculate, result);
+                                         eLazyBoolNo, result);
     }
   }
   result.SetStatus(eReturnStatusFailed);

diff  --git a/lldb/test/API/functionalities/history/TestHistoryRecall.py b/lldb/test/API/functionalities/history/TestHistoryRecall.py
index b3a012dd7bbae..2c17fd3e77446 100644
--- a/lldb/test/API/functionalities/history/TestHistoryRecall.py
+++ b/lldb/test/API/functionalities/history/TestHistoryRecall.py
@@ -1,5 +1,5 @@
 """
-Make sure the !N and !-N commands work properly.
+Test some features of "session history" and history recall.
 """
 
 
@@ -20,9 +20,25 @@ class TestHistoryRecall(TestBase):
 
     def test_history_recall(self):
         """Test the !N and !-N functionality of the command interpreter."""
-        self.sample_test()
+        self.do_bang_N_test()
 
-    def sample_test(self):
+    def test_regex_history(self):
+        """Test the regex commands don't add two elements to the history"""
+        self.do_regex_history_test()
+
+    def do_regex_history_test(self):
+        interp = self.dbg.GetCommandInterpreter()
+        result = lldb.SBCommandReturnObject()
+        command = "_regexp-break foo.c:12"
+        self.runCmd(command, msg="Run the regex break command", inHistory = True)
+        interp.HandleCommand("session history", result, True)
+        self.assertTrue(result.Succeeded(), "session history ran successfully")
+        results = result.GetOutput()
+        self.assertIn(command, results, "Recorded the actual command")
+        self.assertNotIn("breakpoint set --file 'foo.c' --line 12", results,
+                         "Didn't record the resolved command")
+        
+    def do_bang_N_test(self):
         interp = self.dbg.GetCommandInterpreter()
         result = lldb.SBCommandReturnObject()
         interp.HandleCommand("session history", result, True)


        


More information about the lldb-commits mailing list