From e21500e96551cd91ee0bba8ce54c0145ef722ea5 Mon Sep 17 00:00:00 2001 From: Luiz Eduardo Amaral Date: Tue, 17 Feb 2026 23:15:18 -0300 Subject: [PATCH 1/3] add PyUnstable 3.14 bindings --- pyo3-ffi/src/cpython/object.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/pyo3-ffi/src/cpython/object.rs b/pyo3-ffi/src/cpython/object.rs index 9230a1f65e8..2f9aea04cb8 100644 --- a/pyo3-ffi/src/cpython/object.rs +++ b/pyo3-ffi/src/cpython/object.rs @@ -398,3 +398,23 @@ extern "C" { // skipped PyRefTracer // skipped PyRefTracer_SetTracer // skipped PyRefTracer_GetTracer + +extern "C" { + // skipped PyUnstable_Object_EnableDeferredRefcount + + #[cfg(Py_3_14)] + pub fn PyUnstable_Object_IsUniqueReferencedTemporary(obj: *mut PyObject) -> c_int; + + // skipped PyUnstable_IsImmortal + + #[cfg(Py_3_14)] + pub fn PyUnstable_TryIncRef(obj: *mut PyObject) -> c_int; + + #[cfg(Py_3_14)] + pub fn PyUnstable_EnableTryIncRef(obj: *mut PyObject) -> c_void; + + #[cfg(Py_3_14)] + pub fn PyUnstable_Object_IsUniquelyReferenced(op: *mut PyObject) -> c_int; + + // skipped PyUnstable_SetImmortal +} From 685e9222b026eb67e334795aefecbf9fdc23b4a7 Mon Sep 17 00:00:00 2001 From: Luiz Eduardo Amaral Date: Tue, 17 Feb 2026 23:52:33 -0300 Subject: [PATCH 2/3] add changelog entry --- newsfragments/5828.added.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 newsfragments/5828.added.md diff --git a/newsfragments/5828.added.md b/newsfragments/5828.added.md new file mode 100644 index 00000000000..03de98da18e --- /dev/null +++ b/newsfragments/5828.added.md @@ -0,0 +1 @@ +Added FFI wrappers for the following PyUnstable APIs available in Python 3.14: `PyUnstable_Object_IsUniquelyReferenced`, `PyUnstable_Object_IsUniquelyReferencedTemporary`, `PyUnstable_EnableTryIncref`, `PyUnstable_TryIncref` From e252b1766d5aa3ac2aa4cf5fbdca909b9b00e20f Mon Sep 17 00:00:00 2001 From: Luiz Eduardo Amaral Date: Thu, 19 Feb 2026 23:03:44 -0300 Subject: [PATCH 3/3] add PyUnstable 3.15 bindings --- pyo3-ffi/src/cpython/object.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pyo3-ffi/src/cpython/object.rs b/pyo3-ffi/src/cpython/object.rs index 2f9aea04cb8..488347f877a 100644 --- a/pyo3-ffi/src/cpython/object.rs +++ b/pyo3-ffi/src/cpython/object.rs @@ -399,22 +399,22 @@ extern "C" { // skipped PyRefTracer_SetTracer // skipped PyRefTracer_GetTracer +#[cfg(Py_3_14)] extern "C" { // skipped PyUnstable_Object_EnableDeferredRefcount - #[cfg(Py_3_14)] pub fn PyUnstable_Object_IsUniqueReferencedTemporary(obj: *mut PyObject) -> c_int; // skipped PyUnstable_IsImmortal - #[cfg(Py_3_14)] pub fn PyUnstable_TryIncRef(obj: *mut PyObject) -> c_int; - #[cfg(Py_3_14)] pub fn PyUnstable_EnableTryIncRef(obj: *mut PyObject) -> c_void; - #[cfg(Py_3_14)] pub fn PyUnstable_Object_IsUniquelyReferenced(op: *mut PyObject) -> c_int; +} - // skipped PyUnstable_SetImmortal +#[cfg(Py_3_15)] +extern "C" { + pub fn PyUnstable_SetImmortal(op: *mut PyObject) -> c_int; }