mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
GH-116090: Fire RAISE events from _FOR_ITER_TIER_TWO (GH-122413)
This commit is contained in:
parent
68840e91ac
commit
15d4cd0967
6 changed files with 14 additions and 12 deletions
|
@ -263,6 +263,7 @@ PyAPI_FUNC(PyObject *) _PyEval_ImportFrom(PyThreadState *, PyObject *, PyObject
|
||||||
PyAPI_FUNC(PyObject *) _PyEval_ImportName(PyThreadState *, _PyInterpreterFrame *, PyObject *, PyObject *, PyObject *);
|
PyAPI_FUNC(PyObject *) _PyEval_ImportName(PyThreadState *, _PyInterpreterFrame *, PyObject *, PyObject *, PyObject *);
|
||||||
PyAPI_FUNC(PyObject *)_PyEval_MatchClass(PyThreadState *tstate, PyObject *subject, PyObject *type, Py_ssize_t nargs, PyObject *kwargs);
|
PyAPI_FUNC(PyObject *)_PyEval_MatchClass(PyThreadState *tstate, PyObject *subject, PyObject *type, Py_ssize_t nargs, PyObject *kwargs);
|
||||||
PyAPI_FUNC(PyObject *)_PyEval_MatchKeys(PyThreadState *tstate, PyObject *map, PyObject *keys);
|
PyAPI_FUNC(PyObject *)_PyEval_MatchKeys(PyThreadState *tstate, PyObject *map, PyObject *keys);
|
||||||
|
PyAPI_FUNC(void) _PyEval_MonitorRaise(PyThreadState *tstate, _PyInterpreterFrame *frame, _Py_CODEUNIT *instr);
|
||||||
PyAPI_FUNC(int) _PyEval_UnpackIterableStackRef(PyThreadState *tstate, _PyStackRef v, int argcnt, int argcntafter, _PyStackRef *sp);
|
PyAPI_FUNC(int) _PyEval_UnpackIterableStackRef(PyThreadState *tstate, _PyStackRef v, int argcnt, int argcntafter, _PyStackRef *sp);
|
||||||
PyAPI_FUNC(void) _PyEval_FrameClearAndPop(PyThreadState *tstate, _PyInterpreterFrame *frame);
|
PyAPI_FUNC(void) _PyEval_FrameClearAndPop(PyThreadState *tstate, _PyInterpreterFrame *frame);
|
||||||
PyAPI_FUNC(PyObject **) _PyObjectArray_FromStackRefArray(_PyStackRef *input, Py_ssize_t nargs, PyObject **scratch);
|
PyAPI_FUNC(PyObject **) _PyObjectArray_FromStackRefArray(_PyStackRef *input, Py_ssize_t nargs, PyObject **scratch);
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Fix an issue in JIT builds that prevented some :keyword:`for` loops from
|
||||||
|
correctly firing :monitoring-event:`RAISE` monitoring events.
|
|
@ -1124,7 +1124,7 @@ dummy_func(
|
||||||
if (retval_o == NULL) {
|
if (retval_o == NULL) {
|
||||||
if (_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)
|
if (_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)
|
||||||
) {
|
) {
|
||||||
monitor_raise(tstate, frame, this_instr);
|
_PyEval_MonitorRaise(tstate, frame, this_instr);
|
||||||
}
|
}
|
||||||
if (_PyGen_FetchStopIterationValue(&retval_o) == 0) {
|
if (_PyGen_FetchStopIterationValue(&retval_o) == 0) {
|
||||||
assert(retval_o != NULL);
|
assert(retval_o != NULL);
|
||||||
|
@ -2824,7 +2824,7 @@ dummy_func(
|
||||||
if (!_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)) {
|
if (!_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)) {
|
||||||
ERROR_NO_POP();
|
ERROR_NO_POP();
|
||||||
}
|
}
|
||||||
monitor_raise(tstate, frame, this_instr);
|
_PyEval_MonitorRaise(tstate, frame, this_instr);
|
||||||
_PyErr_Clear(tstate);
|
_PyErr_Clear(tstate);
|
||||||
}
|
}
|
||||||
/* iterator ended normally */
|
/* iterator ended normally */
|
||||||
|
@ -2849,6 +2849,7 @@ dummy_func(
|
||||||
if (!_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)) {
|
if (!_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)) {
|
||||||
ERROR_NO_POP();
|
ERROR_NO_POP();
|
||||||
}
|
}
|
||||||
|
_PyEval_MonitorRaise(tstate, frame, frame->instr_ptr);
|
||||||
_PyErr_Clear(tstate);
|
_PyErr_Clear(tstate);
|
||||||
}
|
}
|
||||||
/* iterator ended normally */
|
/* iterator ended normally */
|
||||||
|
@ -2875,7 +2876,7 @@ dummy_func(
|
||||||
if (!_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)) {
|
if (!_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)) {
|
||||||
ERROR_NO_POP();
|
ERROR_NO_POP();
|
||||||
}
|
}
|
||||||
monitor_raise(tstate, frame, this_instr);
|
_PyEval_MonitorRaise(tstate, frame, this_instr);
|
||||||
_PyErr_Clear(tstate);
|
_PyErr_Clear(tstate);
|
||||||
}
|
}
|
||||||
/* iterator ended normally */
|
/* iterator ended normally */
|
||||||
|
|
|
@ -225,9 +225,6 @@ maybe_lltrace_resume_frame(_PyInterpreterFrame *frame, _PyInterpreterFrame *skip
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void monitor_raise(PyThreadState *tstate,
|
|
||||||
_PyInterpreterFrame *frame,
|
|
||||||
_Py_CODEUNIT *instr);
|
|
||||||
static void monitor_reraise(PyThreadState *tstate,
|
static void monitor_reraise(PyThreadState *tstate,
|
||||||
_PyInterpreterFrame *frame,
|
_PyInterpreterFrame *frame,
|
||||||
_Py_CODEUNIT *instr);
|
_Py_CODEUNIT *instr);
|
||||||
|
@ -884,7 +881,7 @@ error:
|
||||||
PyTraceBack_Here(f);
|
PyTraceBack_Here(f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
monitor_raise(tstate, frame, next_instr-1);
|
_PyEval_MonitorRaise(tstate, frame, next_instr-1);
|
||||||
exception_unwind:
|
exception_unwind:
|
||||||
{
|
{
|
||||||
/* We can't use frame->instr_ptr here, as RERAISE may have set it */
|
/* We can't use frame->instr_ptr here, as RERAISE may have set it */
|
||||||
|
@ -2200,8 +2197,8 @@ no_tools_for_local_event(PyThreadState *tstate, _PyInterpreterFrame *frame, int
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
void
|
||||||
monitor_raise(PyThreadState *tstate, _PyInterpreterFrame *frame,
|
_PyEval_MonitorRaise(PyThreadState *tstate, _PyInterpreterFrame *frame,
|
||||||
_Py_CODEUNIT *instr)
|
_Py_CODEUNIT *instr)
|
||||||
{
|
{
|
||||||
if (no_tools_for_global_event(tstate, PY_MONITORING_EVENT_RAISE)) {
|
if (no_tools_for_global_event(tstate, PY_MONITORING_EVENT_RAISE)) {
|
||||||
|
|
1
Python/executor_cases.c.h
generated
1
Python/executor_cases.c.h
generated
|
@ -3173,6 +3173,7 @@
|
||||||
if (!_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)) {
|
if (!_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)) {
|
||||||
JUMP_TO_ERROR();
|
JUMP_TO_ERROR();
|
||||||
}
|
}
|
||||||
|
_PyEval_MonitorRaise(tstate, frame, frame->instr_ptr);
|
||||||
_PyErr_Clear(tstate);
|
_PyErr_Clear(tstate);
|
||||||
}
|
}
|
||||||
/* iterator ended normally */
|
/* iterator ended normally */
|
||||||
|
|
6
Python/generated_cases.c.h
generated
6
Python/generated_cases.c.h
generated
|
@ -3063,7 +3063,7 @@
|
||||||
if (!_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)) {
|
if (!_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
monitor_raise(tstate, frame, this_instr);
|
_PyEval_MonitorRaise(tstate, frame, this_instr);
|
||||||
_PyErr_Clear(tstate);
|
_PyErr_Clear(tstate);
|
||||||
}
|
}
|
||||||
/* iterator ended normally */
|
/* iterator ended normally */
|
||||||
|
@ -3731,7 +3731,7 @@
|
||||||
if (!_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)) {
|
if (!_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)) {
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
monitor_raise(tstate, frame, this_instr);
|
_PyEval_MonitorRaise(tstate, frame, this_instr);
|
||||||
_PyErr_Clear(tstate);
|
_PyErr_Clear(tstate);
|
||||||
}
|
}
|
||||||
/* iterator ended normally */
|
/* iterator ended normally */
|
||||||
|
@ -6026,7 +6026,7 @@
|
||||||
if (retval_o == NULL) {
|
if (retval_o == NULL) {
|
||||||
if (_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)
|
if (_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)
|
||||||
) {
|
) {
|
||||||
monitor_raise(tstate, frame, this_instr);
|
_PyEval_MonitorRaise(tstate, frame, this_instr);
|
||||||
}
|
}
|
||||||
if (_PyGen_FetchStopIterationValue(&retval_o) == 0) {
|
if (_PyGen_FetchStopIterationValue(&retval_o) == 0) {
|
||||||
assert(retval_o != NULL);
|
assert(retval_o != NULL);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue