* Add support for Python 3.13. * In API mode, when you get a function from a C library by writing `fn = lib.myfunc`, you get an object of a special type for performance reasons, instead of a `<cdata 'C-function-type'>`. Before version 1.17 you could only call such objects. You could write `ffi.addressof(lib, "myfunc")` in order to get a real `<cdata>` object, based on the idea that in these cases in C you'd usually write `&myfunc` instead of `myfunc`. In version 1.17, the special object `lib.myfunc` can now be passed in many places where CFFI expects a regular `<cdata>` object. For example, you can now pass it as a callback to a C function call, or write it inside a C structure field of the correct pointer-to-function type, or use `ffi.cast()` or `ffi.typeof()` on it. - drop py313-compat.patch, py313-use-format-unraisable.patch, py313-use-hashpointer.patch (upstream) OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-cffi?expand=0&rev=99
31 lines
986 B
Diff
31 lines
986 B
Diff
From 49127c6929bfc7186fbfd3819dd5e058ad888de4 Mon Sep 17 00:00:00 2001
|
|
From: Victor Stinner <vstinner@python.org>
|
|
Date: Thu, 16 Nov 2023 17:26:12 +0100
|
|
Subject: [PATCH] Use PyErr_FormatUnraisable() on Python 3.13 (#34)
|
|
|
|
Use the new public PyErr_FormatUnraisable() on Python 3.13.
|
|
|
|
The private _PyErr_WriteUnraisableMsg() function was removed in
|
|
Python 3.13:
|
|
https://github.com/python/cpython/pull/111643
|
|
---
|
|
src/c/_cffi_backend.c | 4 ++++
|
|
1 file changed, 4 insertions(+)
|
|
|
|
diff --git a/src/c/_cffi_backend.c b/src/c/_cffi_backend.c
|
|
index 76ed8f09..5e284e00 100644
|
|
--- a/src/c/_cffi_backend.c
|
|
+++ b/src/c/_cffi_backend.c
|
|
@@ -6118,7 +6118,11 @@ static void _my_PyErr_WriteUnraisable(PyObject *t, PyObject *v, PyObject *tb,
|
|
|
|
PyErr_Restore(t, v, tb);
|
|
if (s != NULL) {
|
|
+#if PY_VERSION_HEX >= 0x030D0000
|
|
+ PyErr_FormatUnraisable("Exception ignored %S", s);
|
|
+#else
|
|
_PyErr_WriteUnraisableMsg(PyText_AS_UTF8(s), NULL);
|
|
+#endif
|
|
Py_DECREF(s);
|
|
}
|
|
else
|