]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-105140: remove unused arg of _PyErr_ChainStackItem (#105141)
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>
Thu, 1 Jun 2023 20:57:28 +0000 (21:57 +0100)
committerGitHub <noreply@github.com>
Thu, 1 Jun 2023 20:57:28 +0000 (20:57 +0000)
Include/internal/pycore_pyerrors.h
Objects/genobject.c
Python/errors.c

index 4620a2696449178500796a721b0b20e341075add..d75bef0c3b5d8f239b7d702b416682643d43d9b7 100644 (file)
@@ -61,8 +61,7 @@ PyAPI_FUNC(void) _PyErr_SetObject(
     PyObject *type,
     PyObject *value);
 
-PyAPI_FUNC(void) _PyErr_ChainStackItem(
-    _PyErr_StackItem *exc_info);
+PyAPI_FUNC(void) _PyErr_ChainStackItem(void);
 
 PyAPI_FUNC(void) _PyErr_Clear(PyThreadState *tstate);
 
index b40cf41a60027da9b355b27397bd20fcde63195e..7a295dc239d632a616fa7ace1fe459985bebbfe6 100644 (file)
@@ -222,7 +222,7 @@ gen_send_ex2(PyGenObject *gen, PyObject *arg, PyObject **presult,
 
     if (exc) {
         assert(_PyErr_Occurred(tstate));
-        _PyErr_ChainStackItem(NULL);
+        _PyErr_ChainStackItem();
     }
 
     gen->gi_frame_state = FRAME_EXECUTING;
index a8000ac94918dbfb2aca06c31c153f7549f9a086..eab6503046b5ccac94bd8aa216806ff87ec06a56 100644 (file)
@@ -703,52 +703,28 @@ _PyErr_ChainExceptions1(PyObject *exc)
     }
 }
 
-/* Set the currently set exception's context to the given exception.
-
-   If the provided exc_info is NULL, then the current Python thread state's
-   exc_info will be used for the context instead.
+/* If the current thread is handling an exception (exc_info is ), set this
+   exception as the context of the current raised exception.
 
    This function can only be called when _PyErr_Occurred() is true.
    Also, this function won't create any cycles in the exception context
    chain to the extent that _PyErr_SetObject ensures this. */
 void
-_PyErr_ChainStackItem(_PyErr_StackItem *exc_info)
+_PyErr_ChainStackItem(void)
 {
     PyThreadState *tstate = _PyThreadState_GET();
     assert(_PyErr_Occurred(tstate));
 
-    int exc_info_given;
-    if (exc_info == NULL) {
-        exc_info_given = 0;
-        exc_info = tstate->exc_info;
-    } else {
-        exc_info_given = 1;
-    }
-
+    _PyErr_StackItem *exc_info = tstate->exc_info;
     if (exc_info->exc_value == NULL || exc_info->exc_value == Py_None) {
         return;
     }
 
-    _PyErr_StackItem *saved_exc_info;
-    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);
+    PyObject *exc = _PyErr_GetRaisedException(tstate);
 
     /* _PyErr_SetObject sets the context from PyThreadState. */
-    _PyErr_SetObject(tstate, typ, val);
-    Py_DECREF(typ);  // since _PyErr_Occurred was true
-    Py_XDECREF(val);
-    Py_XDECREF(tb);
-
-    if (exc_info_given) {
-        tstate->exc_info = saved_exc_info;
-    }
+    _PyErr_SetObject(tstate, (PyObject *) Py_TYPE(exc), exc);
+    Py_DECREF(exc);  // since _PyErr_Occurred was true
 }
 
 static PyObject *