[Lldb-commits] [PATCH] D61602: Handle function parameters of RunCommandInterpreter (script bridge)

Lukas Böger via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Mon May 6 10:53:30 PDT 2019


lubgr created this revision.
lubgr added a reviewer: jingham.
lubgr added a project: LLDB.

This issue goes back to this SO answer <https://stackoverflow.com/a/54317534/9593596> by  Jim Ingham, suggesting to fix the python bindings for RunCommandInterpreter. The reference parameters aren't properly handled by SWIG, but we can use the default typemaps library to generate the necessary glue. The new test captures this behavior (it fails without the adjustment in SBDebugger.i).

This is my first patch, so let me know if any additional tests/background/info would be helpful.


Repository:
  rLLDB LLDB

https://reviews.llvm.org/D61602

Files:
  packages/Python/lldbsuite/test/python_api/interpreter/TestRunCommandInterpreterAPI.py
  scripts/interface/SBDebugger.i


Index: scripts/interface/SBDebugger.i
===================================================================
--- scripts/interface/SBDebugger.i
+++ scripts/interface/SBDebugger.i
@@ -423,6 +423,9 @@
     lldb::SBTypeSynthetic
     GetSyntheticForType (lldb::SBTypeNameSpecifier);
 
+    %apply int& INOUT { int& num_errors };
+    %apply bool& INOUT { bool& quit_requested };
+    %apply bool& INOUT { bool& stopped_for_crash };
     void
     RunCommandInterpreter (bool auto_handle_events,
                            bool spawn_thread,
Index: packages/Python/lldbsuite/test/python_api/interpreter/TestRunCommandInterpreterAPI.py
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/python_api/interpreter/TestRunCommandInterpreterAPI.py
@@ -0,0 +1,38 @@
+"""Test the RunCommandInterpreter API."""
+
+import os
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+
+class CommandRunInterpreterAPICase(TestBase):
+
+    mydir = TestBase.compute_mydir(__file__)
+
+    def setUp(self):
+        TestBase.setUp(self)
+
+        self.stdin_path = self.getBuildArtifact("stdin.txt")
+
+        with open(self.stdin_path, 'w') as input_handle:
+            input_handle.write("nonexistingcommand\nquit")
+
+        with open(self.stdin_path, 'r') as input_handle:
+            self.dbg.SetInputFileHandle(input_handle, False)
+
+        # No need to track the output
+        devnull = open(os.devnull, 'w')
+        self.dbg.SetOutputFileHandle(devnull, False)
+        self.dbg.SetErrorFileHandle(devnull, False)
+
+    @add_test_categories(['pyapi'])
+    def test_run_session_with_error_and_quit(self):
+        """Run non-existing and quit command returns appropriate values"""
+
+        n_errors, quit_requested, has_crashed = self.dbg.RunCommandInterpreter(
+                True, False, lldb.SBCommandInterpreterRunOptions(), 0, False,
+                False)
+
+        self.assertGreater(n_errors, 0)
+        self.assertTrue(quit_requested)
+        self.assertFalse(has_crashed)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D61602.198304.patch
Type: text/x-patch
Size: 2090 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20190506/8de1fdc0/attachment-0001.bin>


More information about the lldb-commits mailing list