diff --git a/CHANGELOG.md b/CHANGELOG.md index 870157acaf9..338748d8124 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed incorrectly disabled FFI definition `PyThreadState_DeleteCurrent`. [#2357](https://github.com/PyO3/pyo3/pull/2357) +- Correct FFI definition `PyEval_EvalCodeEx` to take `*const *mut PyObject` array arguments instead of `*mut *mut PyObject` (this was changed in CPython 3.6). [#2368](https://github.com/PyO3/pyo3/pull/2368) ## [0.16.4] - 2022-04-14 diff --git a/pyo3-ffi/src/ceval.rs b/pyo3-ffi/src/ceval.rs index a45b305937c..accd54c25ee 100644 --- a/pyo3-ffi/src/ceval.rs +++ b/pyo3-ffi/src/ceval.rs @@ -3,6 +3,27 @@ use crate::pystate::PyThreadState; use std::os::raw::{c_char, c_int, c_void}; extern "C" { + #[cfg_attr(PyPy, link_name = "PyPyEval_EvalCode")] + pub fn PyEval_EvalCode( + arg1: *mut PyObject, + arg2: *mut PyObject, + arg3: *mut PyObject, + ) -> *mut PyObject; + + pub fn PyEval_EvalCodeEx( + co: *mut PyObject, + globals: *mut PyObject, + locals: *mut PyObject, + args: *const *mut PyObject, + argc: c_int, + kwds: *const *mut PyObject, + kwdc: c_int, + defs: *const *mut PyObject, + defc: c_int, + kwdefs: *mut PyObject, + closure: *mut PyObject, + ) -> *mut PyObject; + #[cfg_attr(Py_3_9, deprecated(note = "Python 3.9"))] #[cfg_attr(PyPy, link_name = "PyPyEval_CallObjectWithKeywords")] pub fn PyEval_CallObjectWithKeywords( diff --git a/pyo3-ffi/src/cpython/ceval.rs b/pyo3-ffi/src/cpython/ceval.rs index 78678cd15c0..eb326081c9c 100644 --- a/pyo3-ffi/src/cpython/ceval.rs +++ b/pyo3-ffi/src/cpython/ceval.rs @@ -3,6 +3,8 @@ use crate::object::{freefunc, PyObject}; use std::os::raw::c_int; extern "C" { + // skipped non-limited _PyEval_CallTracing + pub fn _PyEval_EvalFrameDefault(arg1: *mut crate::PyFrameObject, exc: c_int) -> *mut PyObject; pub fn _PyEval_RequestCodeExtraIndex(func: freefunc) -> c_int; pub fn PyEval_SetProfile(trace_func: Option, arg1: *mut PyObject); diff --git a/pyo3-ffi/src/eval.rs b/pyo3-ffi/src/eval.rs deleted file mode 100644 index 612617c0c29..00000000000 --- a/pyo3-ffi/src/eval.rs +++ /dev/null @@ -1,27 +0,0 @@ -use crate::object::PyObject; -use std::os::raw::c_int; - -extern "C" { - #[cfg_attr(PyPy, link_name = "PyPyEval_EvalCode")] - pub fn PyEval_EvalCode( - arg1: *mut PyObject, - arg2: *mut PyObject, - arg3: *mut PyObject, - ) -> *mut PyObject; - pub fn PyEval_EvalCodeEx( - co: *mut PyObject, - globals: *mut PyObject, - locals: *mut PyObject, - args: *mut *mut PyObject, - argc: c_int, - kwds: *mut *mut PyObject, - kwdc: c_int, - defs: *mut *mut PyObject, - defc: c_int, - kwdefs: *mut PyObject, - closure: *mut PyObject, - ) -> *mut PyObject; - - // skipped non-limited _PyEval_EvalCodeWithName - // skipped non-limited _PyEval_CallTracing -} diff --git a/pyo3-ffi/src/lib.rs b/pyo3-ffi/src/lib.rs index efea47c2dbf..9eabd846c69 100644 --- a/pyo3-ffi/src/lib.rs +++ b/pyo3-ffi/src/lib.rs @@ -296,7 +296,6 @@ pub use self::datetime::*; pub use self::descrobject::*; pub use self::dictobject::*; pub use self::enumobject::*; -pub use self::eval::*; pub use self::fileobject::*; pub use self::fileutils::*; pub use self::floatobject::*; @@ -366,7 +365,6 @@ mod dictobject; // skipped dynamic_annotations.h mod enumobject; // skipped errcode.h -mod eval; // skipped exports.h mod fileobject; mod fileutils;