From 1bffce1094aab406c8e10058ac39f55dadedc601 Mon Sep 17 00:00:00 2001 From: David Hewitt Date: Mon, 3 Nov 2025 09:07:52 +0000 Subject: [PATCH 1/2] sync FFI definitions in ceval.h as of Python 3.14 --- pyo3-ffi/src/ceval.rs | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/pyo3-ffi/src/ceval.rs b/pyo3-ffi/src/ceval.rs index 5746d574346..a84b6a0c8cd 100644 --- a/pyo3-ffi/src/ceval.rs +++ b/pyo3-ffi/src/ceval.rs @@ -62,7 +62,16 @@ extern "C" { pub fn PyEval_GetGlobals() -> *mut PyObject; #[cfg_attr(PyPy, link_name = "PyPyEval_GetLocals")] pub fn PyEval_GetLocals() -> *mut PyObject; + #[cfg_attr(PyPy, link_name = "PyPyEval_GetFrame")] pub fn PyEval_GetFrame() -> *mut crate::PyFrameObject; + + #[cfg_attr(PyPy, link_name = "PyPyEval_GetFrameBuiltins")] + pub fn PyEval_GetFrameBuiltins() -> *mut PyObject; + #[cfg_attr(PyPy, link_name = "PyPyEval_GetFrameGlobals")] + pub fn PyEval_GetFrameGlobals() -> *mut PyObject; + #[cfg_attr(PyPy, link_name = "PyPyEval_GetFrameLocals")] + pub fn PyEval_GetFrameLocals() -> *mut PyObject; + #[cfg_attr(PyPy, link_name = "PyPy_AddPendingCall")] pub fn Py_AddPendingCall( func: Option c_int>, @@ -70,35 +79,34 @@ extern "C" { ) -> c_int; #[cfg_attr(PyPy, link_name = "PyPy_MakePendingCalls")] pub fn Py_MakePendingCalls() -> c_int; + #[cfg_attr(PyPy, link_name = "PyPy_SetRecursionLimit")] pub fn Py_SetRecursionLimit(arg1: c_int); #[cfg_attr(PyPy, link_name = "PyPy_GetRecursionLimit")] pub fn Py_GetRecursionLimit() -> c_int; - fn _Py_CheckRecursiveCall(_where: *mut c_char) -> c_int; -} -extern "C" { #[cfg(Py_3_9)] #[cfg_attr(PyPy, link_name = "PyPy_EnterRecursiveCall")] pub fn Py_EnterRecursiveCall(arg1: *const c_char) -> c_int; #[cfg(Py_3_9)] #[cfg_attr(PyPy, link_name = "PyPy_LeaveRecursiveCall")] pub fn Py_LeaveRecursiveCall(); -} -extern "C" { + #[cfg_attr(PyPy, link_name = "PyPyEval_GetFuncName")] pub fn PyEval_GetFuncName(arg1: *mut PyObject) -> *const c_char; + #[cfg_attr(PyPy, link_name = "PyPyEval_GetFuncDesc")] pub fn PyEval_GetFuncDesc(arg1: *mut PyObject) -> *const c_char; - pub fn PyEval_GetCallStats(arg1: *mut PyObject) -> *mut PyObject; + + #[cfg_attr(PyPy, link_name = "PyPyEval_EvalFrame")] pub fn PyEval_EvalFrame(arg1: *mut crate::PyFrameObject) -> *mut PyObject; + #[cfg_attr(PyPy, link_name = "PyPyEval_EvalFrameEx")] pub fn PyEval_EvalFrameEx(f: *mut crate::PyFrameObject, exc: c_int) -> *mut PyObject; + #[cfg_attr(PyPy, link_name = "PyPyEval_SaveThread")] pub fn PyEval_SaveThread() -> *mut PyThreadState; #[cfg_attr(PyPy, link_name = "PyPyEval_RestoreThread")] pub fn PyEval_RestoreThread(arg1: *mut PyThreadState); -} -extern "C" { #[cfg(not(Py_3_13))] #[cfg_attr(PyPy, link_name = "PyPyEval_ThreadsInitialized")] #[cfg_attr( @@ -116,7 +124,11 @@ extern "C" { ) )] pub fn PyEval_InitThreads(); + #[cfg(not(Py_3_13))] + #[deprecated(note = "Deprecated in Python 3.2")] pub fn PyEval_AcquireLock(); + #[cfg(not(Py_3_13))] + #[deprecated(note = "Deprecated in Python 3.2")] pub fn PyEval_ReleaseLock(); #[cfg_attr(PyPy, link_name = "PyPyEval_AcquireThread")] pub fn PyEval_AcquireThread(tstate: *mut PyThreadState); From df94c045ab326e7f1e4509b027d548441dcda0b4 Mon Sep 17 00:00:00 2001 From: David Hewitt Date: Sat, 29 Nov 2025 14:58:34 +0000 Subject: [PATCH 2/2] newsfragments --- newsfragments/5590.added.md | 1 + newsfragments/5590.changed.md | 1 + newsfragments/5590.removed.md | 2 ++ pyo3-ffi/src/ceval.rs | 3 +++ 4 files changed, 7 insertions(+) create mode 100644 newsfragments/5590.added.md create mode 100644 newsfragments/5590.changed.md create mode 100644 newsfragments/5590.removed.md diff --git a/newsfragments/5590.added.md b/newsfragments/5590.added.md new file mode 100644 index 00000000000..5ef862c3308 --- /dev/null +++ b/newsfragments/5590.added.md @@ -0,0 +1 @@ +Add FFI definitions `PyEval_GetFrameBuiltins`, `PyEval_GetFrameGlobals` and `PyEval_GetFrameLocals` on Python 3.13 and up. diff --git a/newsfragments/5590.changed.md b/newsfragments/5590.changed.md new file mode 100644 index 00000000000..8a820fab426 --- /dev/null +++ b/newsfragments/5590.changed.md @@ -0,0 +1 @@ +Deprecate FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock`. diff --git a/newsfragments/5590.removed.md b/newsfragments/5590.removed.md new file mode 100644 index 00000000000..9b7598813d3 --- /dev/null +++ b/newsfragments/5590.removed.md @@ -0,0 +1,2 @@ +Remove FFI definition `PyEval_GetCallStats` (removed from CPython in Python 3.7). +Remove FFI definitions `PyEval_AcquireLock` and `PyEval_ReleaseLock` on Python 3.13 and up. diff --git a/pyo3-ffi/src/ceval.rs b/pyo3-ffi/src/ceval.rs index a84b6a0c8cd..06f2207776e 100644 --- a/pyo3-ffi/src/ceval.rs +++ b/pyo3-ffi/src/ceval.rs @@ -65,10 +65,13 @@ extern "C" { #[cfg_attr(PyPy, link_name = "PyPyEval_GetFrame")] pub fn PyEval_GetFrame() -> *mut crate::PyFrameObject; + #[cfg(Py_3_13)] #[cfg_attr(PyPy, link_name = "PyPyEval_GetFrameBuiltins")] pub fn PyEval_GetFrameBuiltins() -> *mut PyObject; + #[cfg(Py_3_13)] #[cfg_attr(PyPy, link_name = "PyPyEval_GetFrameGlobals")] pub fn PyEval_GetFrameGlobals() -> *mut PyObject; + #[cfg(Py_3_13)] #[cfg_attr(PyPy, link_name = "PyPyEval_GetFrameLocals")] pub fn PyEval_GetFrameLocals() -> *mut PyObject;