|
@@ -617,7 +617,19 @@ do_python_task() {
|
|
|
Py_DECREF(_generator);
|
|
Py_DECREF(_generator);
|
|
|
_generator = nullptr;
|
|
_generator = nullptr;
|
|
|
|
|
|
|
|
|
|
+#if PY_VERSION_HEX >= 0x030D0000 // Python 3.13
|
|
|
|
|
+ // Python 3.13 does not support _PyGen_FetchStopIterationValue anymore.
|
|
|
|
|
+ if (PyErr_ExceptionMatches(PyExc_StopIteration)) {
|
|
|
|
|
+ PyObject *exc = PyErr_GetRaisedException();
|
|
|
|
|
+ result = ((PyStopIterationObject *)exc)->value;
|
|
|
|
|
+ if (result == nullptr) {
|
|
|
|
|
+ result = Py_None;
|
|
|
|
|
+ }
|
|
|
|
|
+ Py_INCREF(result);
|
|
|
|
|
+ Py_DECREF(exc);
|
|
|
|
|
+#else
|
|
|
if (_PyGen_FetchStopIterationValue(&result) == 0) {
|
|
if (_PyGen_FetchStopIterationValue(&result) == 0) {
|
|
|
|
|
+#endif
|
|
|
PyErr_Clear();
|
|
PyErr_Clear();
|
|
|
|
|
|
|
|
if (_must_cancel) {
|
|
if (_must_cancel) {
|