From d126d764d7432ea1524903bc7312b844981b11a8 Mon Sep 17 00:00:00 2001 From: Dean Li Date: Mon, 23 Aug 2021 19:15:53 +0800 Subject: [PATCH 1/4] ffi: cleanup genobject --- src/ffi/genobject.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ffi/genobject.rs b/src/ffi/genobject.rs index 340d28b00a6..c486e202165 100644 --- a/src/ffi/genobject.rs +++ b/src/ffi/genobject.rs @@ -35,7 +35,6 @@ pub unsafe fn PyGen_CheckExact(op: *mut PyObject) -> c_int { extern "C" { pub fn PyGen_New(frame: *mut PyFrameObject) -> *mut PyObject; - // skipped PyGen_New // skipped PyGen_NewWithQualName // skipped _PyGen_SetStopIterationValue // skipped _PyGen_FetchStopIterationValue From 1eeeb1fa32601ae0c97c595e1d735cffd107b0fe Mon Sep 17 00:00:00 2001 From: Dean Li Date: Mon, 23 Aug 2021 19:24:40 +0800 Subject: [PATCH 2/4] ffi: cleanup pylifecycle --- src/ffi/pylifecycle.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ffi/pylifecycle.rs b/src/ffi/pylifecycle.rs index 8cccd211ee3..9970ceb974a 100644 --- a/src/ffi/pylifecycle.rs +++ b/src/ffi/pylifecycle.rs @@ -37,6 +37,8 @@ extern "C" { pub fn Py_GetPath() -> *mut wchar_t; pub fn Py_SetPath(arg1: *const wchar_t); + // skipped _Py_CheckPython3 + #[cfg_attr(PyPy, link_name = "PyPy_GetVersion")] pub fn Py_GetVersion() -> *const c_char; pub fn Py_GetPlatform() -> *const c_char; From 0a50b42352533ce0b2ce480b7ac90561b8e70e38 Mon Sep 17 00:00:00 2001 From: Dean Li Date: Mon, 23 Aug 2021 20:28:37 +0800 Subject: [PATCH 3/4] ffi: cleanup pymem --- src/ffi/cpython/pymem.rs | 46 ++++++++++++++++++++++++++++++++++++++++ src/ffi/pymem.rs | 41 ----------------------------------- 2 files changed, 46 insertions(+), 41 deletions(-) create mode 100644 src/ffi/cpython/pymem.rs diff --git a/src/ffi/cpython/pymem.rs b/src/ffi/cpython/pymem.rs new file mode 100644 index 00000000000..7c07d5c9f1d --- /dev/null +++ b/src/ffi/cpython/pymem.rs @@ -0,0 +1,46 @@ +use libc::size_t; +use std::os::raw::c_void; + +extern "C" { + #[cfg_attr(PyPy, link_name = "PyPyMem_RawMalloc")] + pub fn PyMem_RawMalloc(size: size_t) -> *mut c_void; + #[cfg_attr(PyPy, link_name = "PyPyMem_RawCalloc")] + pub fn PyMem_RawCalloc(nelem: size_t, elsize: size_t) -> *mut c_void; + #[cfg_attr(PyPy, link_name = "PyPyMem_RawRealloc")] + pub fn PyMem_RawRealloc(ptr: *mut c_void, new_size: size_t) -> *mut c_void; + #[cfg_attr(PyPy, link_name = "PyPyMem_RawFree")] + pub fn PyMem_RawFree(ptr: *mut c_void); + + // skipped _PyMem_GetCurrentAllocatorName + // skipped _PyMem_RawStrdup + // skipped _PyMem_Strdup + // skipped _PyMem_RawWcsdup +} + +#[repr(C)] +#[derive(Copy, Clone)] +pub enum PyMemAllocatorDomain { + PYMEM_DOMAIN_RAW, + PYMEM_DOMAIN_MEM, + PYMEM_DOMAIN_OBJ, +} + +// skipped PyMemAllocatorName + +#[repr(C)] +#[derive(Copy, Clone)] +pub struct PyMemAllocatorEx { + pub ctx: *mut c_void, + pub malloc: Option *mut c_void>, + pub calloc: + Option *mut c_void>, + pub realloc: + Option *mut c_void>, + pub free: Option, +} + +extern "C" { + pub fn PyMem_GetAllocator(domain: PyMemAllocatorDomain, allocator: *mut PyMemAllocatorEx); + pub fn PyMem_SetAllocator(domain: PyMemAllocatorDomain, allocator: *mut PyMemAllocatorEx); + pub fn PyMem_SetupDebugHooks(); +} diff --git a/src/ffi/pymem.rs b/src/ffi/pymem.rs index a7318797de4..ab0c3d74af9 100644 --- a/src/ffi/pymem.rs +++ b/src/ffi/pymem.rs @@ -1,18 +1,6 @@ use libc::size_t; use std::os::raw::c_void; -#[cfg(not(Py_LIMITED_API))] -extern "C" { - #[cfg_attr(PyPy, link_name = "PyPyMem_RawMalloc")] - pub fn PyMem_RawMalloc(size: size_t) -> *mut c_void; - #[cfg_attr(PyPy, link_name = "PyPyMem_RawCalloc")] - pub fn PyMem_RawCalloc(nelem: size_t, elsize: size_t) -> *mut c_void; - #[cfg_attr(PyPy, link_name = "PyPyMem_RawRealloc")] - pub fn PyMem_RawRealloc(ptr: *mut c_void, new_size: size_t) -> *mut c_void; - #[cfg_attr(PyPy, link_name = "PyPyMem_RawFree")] - pub fn PyMem_RawFree(ptr: *mut c_void); -} - extern "C" { #[cfg_attr(PyPy, link_name = "PyPyMem_Malloc")] pub fn PyMem_Malloc(size: size_t) -> *mut c_void; @@ -23,32 +11,3 @@ extern "C" { #[cfg_attr(PyPy, link_name = "PyPyMem_Free")] pub fn PyMem_Free(ptr: *mut c_void); } - -#[cfg(not(Py_LIMITED_API))] -#[repr(C)] -#[derive(Copy, Clone)] -pub enum PyMemAllocatorDomain { - PYMEM_DOMAIN_RAW, - PYMEM_DOMAIN_MEM, - PYMEM_DOMAIN_OBJ, -} - -#[repr(C)] -#[derive(Copy, Clone)] -#[cfg(not(Py_LIMITED_API))] -pub struct PyMemAllocatorEx { - pub ctx: *mut c_void, - pub malloc: Option *mut c_void>, - pub calloc: - Option *mut c_void>, - pub realloc: - Option *mut c_void>, - pub free: Option, -} - -#[cfg(not(Py_LIMITED_API))] -extern "C" { - pub fn PyMem_GetAllocator(domain: PyMemAllocatorDomain, allocator: *mut PyMemAllocatorEx); - pub fn PyMem_SetAllocator(domain: PyMemAllocatorDomain, allocator: *mut PyMemAllocatorEx); - pub fn PyMem_SetupDebugHooks(); -} From ebeee22d7184577e9ff3a9445e8412cdb59863b7 Mon Sep 17 00:00:00 2001 From: Dean Li Date: Mon, 23 Aug 2021 20:49:29 +0800 Subject: [PATCH 4/4] ffi: cleanup pystate --- src/ffi/cpython/ceval.rs | 3 ++- src/ffi/cpython/pystate.rs | 5 ++++- src/ffi/pystate.rs | 30 +++++++++++++++++------------- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/ffi/cpython/ceval.rs b/src/ffi/cpython/ceval.rs index 29affbd72bb..b85c4d07da3 100644 --- a/src/ffi/cpython/ceval.rs +++ b/src/ffi/cpython/ceval.rs @@ -1,4 +1,5 @@ -use crate::ffi::{freefunc, PyObject, Py_tracefunc}; +use crate::ffi::cpython::pystate::Py_tracefunc; +use crate::ffi::object::{freefunc, PyObject}; use std::os::raw::c_int; extern "C" { diff --git a/src/ffi/cpython/pystate.rs b/src/ffi/cpython/pystate.rs index 7d2f9abf6a6..b132cc4e05f 100644 --- a/src/ffi/cpython/pystate.rs +++ b/src/ffi/cpython/pystate.rs @@ -55,7 +55,10 @@ extern "C" { #[cfg(not(PyPy))] #[cfg_attr(docsrs, doc(cfg(not(PyPy))))] pub fn PyThreadState_Next(tstate: *mut PyThreadState) -> *mut PyThreadState; - // skipped PyThreadState_DeleteCurrent + + #[cfg(py_sys_config = "WITH_THREAD")] + #[cfg_attr(PyPy, link_name = "PyPyThreadState_DeleteCurrent")] + pub fn PyThreadState_DeleteCurrent(); } #[cfg(Py_3_9)] diff --git a/src/ffi/pystate.rs b/src/ffi/pystate.rs index e26619e7ec8..8007fe19980 100644 --- a/src/ffi/pystate.rs +++ b/src/ffi/pystate.rs @@ -2,6 +2,7 @@ use crate::ffi::moduleobject::PyModuleDef; use crate::ffi::object::PyObject; use std::os::raw::c_int; + #[cfg(not(PyPy))] use std::os::raw::c_long; @@ -27,15 +28,16 @@ extern "C" { #[cfg(all(Py_3_8, not(PyPy)))] #[cfg_attr(docsrs, doc(all(Py_3_8, not(PyPy))))] - pub fn PyInterpreterState_GetDict() -> *mut PyObject; + pub fn PyInterpreterState_GetDict(arg1: *mut PyInterpreterState) -> *mut PyObject; #[cfg(all(Py_3_7, not(PyPy)))] #[cfg_attr(docsrs, doc(all(Py_3_7, not(PyPy))))] - pub fn PyInterpreterState_GetID() -> i64; + pub fn PyInterpreterState_GetID(arg1: *mut PyInterpreterState) -> i64; #[cfg(not(PyPy))] #[cfg_attr(docsrs, doc(cfg(not(PyPy))))] pub fn PyState_AddModule(arg1: *mut PyObject, arg2: *mut PyModuleDef) -> c_int; + #[cfg(not(PyPy))] #[cfg_attr(docsrs, doc(cfg(not(PyPy))))] pub fn PyState_RemoveModule(arg1: *mut PyModuleDef) -> c_int; @@ -46,18 +48,21 @@ extern "C" { #[cfg_attr(PyPy, link_name = "PyPyThreadState_New")] pub fn PyThreadState_New(arg1: *mut PyInterpreterState) -> *mut PyThreadState; - //fn _PyThreadState_Prealloc(arg1: *mut PyInterpreterState) - // -> *mut PyThreadState; - //fn _PyThreadState_Init(arg1: *mut PyThreadState); #[cfg_attr(PyPy, link_name = "PyPyThreadState_Clear")] pub fn PyThreadState_Clear(arg1: *mut PyThreadState); #[cfg_attr(PyPy, link_name = "PyPyThreadState_Delete")] pub fn PyThreadState_Delete(arg1: *mut PyThreadState); - #[cfg(py_sys_config = "WITH_THREAD")] - #[cfg_attr(PyPy, link_name = "PyPyThreadState_DeleteCurrent")] - pub fn PyThreadState_DeleteCurrent(); + #[cfg_attr(PyPy, link_name = "PyPyThreadState_Get")] pub fn PyThreadState_Get() -> *mut PyThreadState; +} + +#[inline] +pub unsafe fn PyThreadState_GET() -> *mut PyThreadState { + PyThreadState_Get() +} + +extern "C" { #[cfg_attr(PyPy, link_name = "PyPyThreadState_Swap")] pub fn PyThreadState_Swap(arg1: *mut PyThreadState) -> *mut PyThreadState; #[cfg_attr(PyPy, link_name = "PyPyThreadState_GetDict")] @@ -67,6 +72,10 @@ extern "C" { pub fn PyThreadState_SetAsyncExc(arg1: c_long, arg2: *mut PyObject) -> c_int; } +// skipped non-limited / 3.9 PyThreadState_GetInterpreter +// skipped non-limited / 3.9 PyThreadState_GetFrame +// skipped non-limited / 3.9 PyThreadState_GetID + #[repr(C)] #[derive(Copy, Clone, Debug, PartialEq, Eq)] pub enum PyGILState_STATE { @@ -83,8 +92,3 @@ extern "C" { #[cfg_attr(docsrs, doc(cfg(not(PyPy))))] pub fn PyGILState_GetThisThreadState() -> *mut PyThreadState; } - -#[inline] -pub unsafe fn PyThreadState_GET() -> *mut PyThreadState { - PyThreadState_Get() -}