gh-105140: remove unused arg of _PyErr_ChainStackItem (#105141)

This commit is contained in:
Irit Katriel 2023-06-01 21:57:28 +01:00 committed by GitHub
parent ede89af605
commit 60f8117d0c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 34 deletions

View File

@ -61,8 +61,7 @@ PyAPI_FUNC(void) _PyErr_SetObject(
PyObject *type, PyObject *type,
PyObject *value); PyObject *value);
PyAPI_FUNC(void) _PyErr_ChainStackItem( PyAPI_FUNC(void) _PyErr_ChainStackItem(void);
_PyErr_StackItem *exc_info);
PyAPI_FUNC(void) _PyErr_Clear(PyThreadState *tstate); PyAPI_FUNC(void) _PyErr_Clear(PyThreadState *tstate);

View File

@ -222,7 +222,7 @@ gen_send_ex2(PyGenObject *gen, PyObject *arg, PyObject **presult,
if (exc) { if (exc) {
assert(_PyErr_Occurred(tstate)); assert(_PyErr_Occurred(tstate));
_PyErr_ChainStackItem(NULL); _PyErr_ChainStackItem();
} }
gen->gi_frame_state = FRAME_EXECUTING; gen->gi_frame_state = FRAME_EXECUTING;

View File

@ -703,52 +703,28 @@ _PyErr_ChainExceptions1(PyObject *exc)
} }
} }
/* Set the currently set exception's context to the given exception. /* If the current thread is handling an exception (exc_info is ), set this
exception as the context of the current raised exception.
If the provided exc_info is NULL, then the current Python thread state's
exc_info will be used for the context instead.
This function can only be called when _PyErr_Occurred() is true. This function can only be called when _PyErr_Occurred() is true.
Also, this function won't create any cycles in the exception context Also, this function won't create any cycles in the exception context
chain to the extent that _PyErr_SetObject ensures this. */ chain to the extent that _PyErr_SetObject ensures this. */
void void
_PyErr_ChainStackItem(_PyErr_StackItem *exc_info) _PyErr_ChainStackItem(void)
{ {
PyThreadState *tstate = _PyThreadState_GET(); PyThreadState *tstate = _PyThreadState_GET();
assert(_PyErr_Occurred(tstate)); assert(_PyErr_Occurred(tstate));
int exc_info_given; _PyErr_StackItem *exc_info = tstate->exc_info;
if (exc_info == NULL) {
exc_info_given = 0;
exc_info = tstate->exc_info;
} else {
exc_info_given = 1;
}
if (exc_info->exc_value == NULL || exc_info->exc_value == Py_None) { if (exc_info->exc_value == NULL || exc_info->exc_value == Py_None) {
return; return;
} }
_PyErr_StackItem *saved_exc_info; PyObject *exc = _PyErr_GetRaisedException(tstate);
if (exc_info_given) {
/* Temporarily set the thread state's exc_info since this is what
_PyErr_SetObject uses for implicit exception chaining. */
saved_exc_info = tstate->exc_info;
tstate->exc_info = exc_info;
}
PyObject *typ, *val, *tb;
_PyErr_Fetch(tstate, &typ, &val, &tb);
/* _PyErr_SetObject sets the context from PyThreadState. */ /* _PyErr_SetObject sets the context from PyThreadState. */
_PyErr_SetObject(tstate, typ, val); _PyErr_SetObject(tstate, (PyObject *) Py_TYPE(exc), exc);
Py_DECREF(typ); // since _PyErr_Occurred was true Py_DECREF(exc); // since _PyErr_Occurred was true
Py_XDECREF(val);
Py_XDECREF(tb);
if (exc_info_given) {
tstate->exc_info = saved_exc_info;
}
} }
static PyObject * static PyObject *