summaryrefslogtreecommitdiffstats
path: root/Python/ceval.c
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2023-07-28 08:48:35 (GMT)
committerGitHub <noreply@github.com>2023-07-28 08:48:35 (GMT)
commit3b1a4c18426c78a2fda0d59728bfe9eb92889722 (patch)
treec512a79c5cd867b030ce76fa757968749b895d6c /Python/ceval.c
parent4014869b4b2456b3da1118a37332f9e9e851aebf (diff)
downloadcpython-3b1a4c18426c78a2fda0d59728bfe9eb92889722.zip
cpython-3b1a4c18426c78a2fda0d59728bfe9eb92889722.tar.gz
cpython-3b1a4c18426c78a2fda0d59728bfe9eb92889722.tar.bz2
[3.12] GH-106897: Add `RERAISE` event to `sys.monitoring`. (GH-107291) (GH-107346)
* Ensures that exception handling events are balanced. Each [re]raise event has a matching unwind/handled event.
Diffstat (limited to 'Python/ceval.c')
-rw-r--r--Python/ceval.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index 72d679a..899f135 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -185,6 +185,9 @@ lltrace_resume_frame(_PyInterpreterFrame *frame)
static void monitor_raise(PyThreadState *tstate,
_PyInterpreterFrame *frame,
_Py_CODEUNIT *instr);
+static void monitor_reraise(PyThreadState *tstate,
+ _PyInterpreterFrame *frame,
+ _Py_CODEUNIT *instr);
static int monitor_stop_iteration(PyThreadState *tstate,
_PyInterpreterFrame *frame,
_Py_CODEUNIT *instr);
@@ -923,7 +926,6 @@ error:
}
}
monitor_raise(tstate, frame, next_instr-1);
-
exception_unwind:
{
/* We can't use frame->f_lasti here, as RERAISE may have set it */
@@ -2037,6 +2039,16 @@ monitor_raise(PyThreadState *tstate, _PyInterpreterFrame *frame,
do_monitor_exc(tstate, frame, instr, PY_MONITORING_EVENT_RAISE);
}
+static void
+monitor_reraise(PyThreadState *tstate, _PyInterpreterFrame *frame,
+ _Py_CODEUNIT *instr)
+{
+ if (no_tools_for_event(tstate, frame, PY_MONITORING_EVENT_RERAISE)) {
+ return;
+ }
+ do_monitor_exc(tstate, frame, instr, PY_MONITORING_EVENT_RERAISE);
+}
+
static int
monitor_stop_iteration(PyThreadState *tstate, _PyInterpreterFrame *frame,
_Py_CODEUNIT *instr)