[Python-checkins] gh-105140: remove unused arg of _PyErr_ChainStackItem (#105141)

iritkatriel webhook-mailer at python.org
Thu Jun 1 16:57:36 EDT 2023


https://github.com/python/cpython/commit/60f8117d0c685c2923b7cb17b725b67cd41e8410
commit: 60f8117d0c685c2923b7cb17b725b67cd41e8410
branch: main
author: Irit Katriel <1055913+iritkatriel at users.noreply.github.com>
committer: iritkatriel <1055913+iritkatriel at users.noreply.github.com>
date: 2023-06-01T20:57:28Z
summary:

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

files:
M Include/internal/pycore_pyerrors.h
M Objects/genobject.c
M Python/errors.c

diff --git a/Include/internal/pycore_pyerrors.h b/Include/internal/pycore_pyerrors.h
index 4620a2696449..d75bef0c3b5d 100644
--- a/Include/internal/pycore_pyerrors.h
+++ b/Include/internal/pycore_pyerrors.h
@@ -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);
 
diff --git a/Objects/genobject.c b/Objects/genobject.c
index b40cf41a6002..7a295dc239d6 100644
--- a/Objects/genobject.c
+++ b/Objects/genobject.c
@@ -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;
diff --git a/Python/errors.c b/Python/errors.c
index a8000ac94918..eab6503046b5 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -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 *



More information about the Python-checkins mailing list