aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/python/lib/gdb/dap/events.py29
-rw-r--r--gdb/python/lib/gdb/dap/launch.py4
-rw-r--r--gdb/python/lib/gdb/dap/next.py10
-rw-r--r--gdb/python/lib/gdb/dap/pause.py4
4 files changed, 16 insertions, 31 deletions
diff --git a/gdb/python/lib/gdb/dap/events.py b/gdb/python/lib/gdb/dap/events.py
index e9ddcab..09214ec 100644
--- a/gdb/python/lib/gdb/dap/events.py
+++ b/gdb/python/lib/gdb/dap/events.py
@@ -17,7 +17,7 @@ import enum
import gdb
from .server import send_event
-from .startup import in_gdb_thread, Invoker, log
+from .startup import exec_and_log, in_gdb_thread, log
from .modules import is_module, make_module
@@ -111,29 +111,14 @@ _expected_stop = None
@in_gdb_thread
-def expect_stop(reason):
- """Indicate that a stop is expected, for the reason given."""
+def exec_and_expect_stop(cmd, reason):
+ """Indicate that a stop is expected, then execute CMD"""
global _expected_stop
_expected_stop = reason
-
-
-# A wrapper for Invoker that also sets the expected stop.
-class ExecutionInvoker(Invoker):
- """A subclass of Invoker that sets the expected stop.
- Note that this assumes that the command will restart the inferior,
- so it will also cause ContinuedEvents to be suppressed."""
-
- def __init__(self, cmd, expected):
- super().__init__(cmd)
- self.expected = expected
-
- @in_gdb_thread
- def __call__(self):
- expect_stop(self.expected)
- global _suppress_cont
- _suppress_cont = True
- # FIXME if the call fails should we clear _suppress_cont?
- super().__call__()
+ global _suppress_cont
+ _suppress_cont = True
+ # FIXME if the call fails should we clear _suppress_cont?
+ exec_and_log(cmd)
@in_gdb_thread
diff --git a/gdb/python/lib/gdb/dap/launch.py b/gdb/python/lib/gdb/dap/launch.py
index e81d284..ab704c7 100644
--- a/gdb/python/lib/gdb/dap/launch.py
+++ b/gdb/python/lib/gdb/dap/launch.py
@@ -18,7 +18,7 @@ import gdb
# These are deprecated in 3.9, but required in older versions.
from typing import Mapping, Optional, Sequence
-from .events import ExecutionInvoker
+from .events import exec_and_expect_stop
from .server import request, capability
from .startup import in_gdb_thread, exec_and_log
@@ -85,4 +85,4 @@ def config_done(**args):
if _program is not None:
# Suppress the continue event, but don't set any particular
# expected stop.
- ExecutionInvoker("run", None)()
+ exec_and_expect_stop("run", None)
diff --git a/gdb/python/lib/gdb/dap/next.py b/gdb/python/lib/gdb/dap/next.py
index 431020e..eedc26f 100644
--- a/gdb/python/lib/gdb/dap/next.py
+++ b/gdb/python/lib/gdb/dap/next.py
@@ -15,7 +15,7 @@
import gdb
-from .events import StopKinds, ExecutionInvoker
+from .events import StopKinds, exec_and_expect_stop
from .server import capability, request
from .startup import in_gdb_thread, send_gdb, send_gdb_with_response
from .state import set_thread
@@ -57,7 +57,7 @@ def next(
cmd = "next"
if granularity == "instruction":
cmd += "i"
- ExecutionInvoker(cmd, StopKinds.STEP)()
+ exec_and_expect_stop(cmd, StopKinds.STEP)
@capability("supportsSteppingGranularity")
@@ -70,13 +70,13 @@ def step_in(
cmd = "step"
if granularity == "instruction":
cmd += "i"
- ExecutionInvoker(cmd, StopKinds.STEP)()
+ exec_and_expect_stop(cmd, StopKinds.STEP)
@request("stepOut", response=False)
def step_out(*, threadId: int, singleThread: bool = False, **args):
_handle_thread_step(threadId, singleThread, True)
- ExecutionInvoker("finish", StopKinds.STEP)()
+ exec_and_expect_stop("finish", StopKinds.STEP)
# This is a server-side request because it is funny: it wants to
@@ -87,5 +87,5 @@ def step_out(*, threadId: int, singleThread: bool = False, **args):
@request("continue", on_dap_thread=True)
def continue_request(*, threadId: int, singleThread: bool = False, **args):
locked = send_gdb_with_response(lambda: _handle_thread_step(threadId, singleThread))
- send_gdb(ExecutionInvoker("continue", None))
+ send_gdb(lambda: exec_and_expect_stop("continue", None))
return {"allThreadsContinued": not locked}
diff --git a/gdb/python/lib/gdb/dap/pause.py b/gdb/python/lib/gdb/dap/pause.py
index d96172c..d276ab1 100644
--- a/gdb/python/lib/gdb/dap/pause.py
+++ b/gdb/python/lib/gdb/dap/pause.py
@@ -13,10 +13,10 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-from .events import StopKinds, ExecutionInvoker
+from .events import StopKinds, exec_and_expect_stop
from .server import request
@request("pause", response=False)
def pause(**args):
- ExecutionInvoker("interrupt -a", StopKinds.PAUSE)()
+ exec_and_expect_stop("interrupt -a", StopKinds.PAUSE)