pyo3_ffi/cpython/
objimpl.rs1use core::ffi::c_int;
2#[cfg(not(all(Py_3_11, any(PyPy, GraalPy))))]
3use libc::size_t;
4
5#[cfg(not(any(PyPy, GraalPy)))]
6use core::ffi::c_void;
7
8use crate::object::*;
9
10#[cfg(not(any(PyPy, GraalPy)))]
16#[repr(C)]
17#[derive(Copy, Clone)]
18pub struct PyObjectArenaAllocator {
19 pub ctx: *mut c_void,
20 pub alloc: Option<extern "C" fn(ctx: *mut c_void, size: size_t) -> *mut c_void>,
21 pub free: Option<extern "C" fn(ctx: *mut c_void, ptr: *mut c_void, size: size_t)>,
22}
23
24extern_libpython! {
25 #[cfg(not(any(PyPy, GraalPy)))]
26 pub fn PyObject_GetArenaAllocator(allocator: *mut PyObjectArenaAllocator);
27 #[cfg(not(any(PyPy, GraalPy)))]
28 pub fn PyObject_SetArenaAllocator(allocator: *mut PyObjectArenaAllocator);
29
30 pub fn PyObject_IS_GC(o: *mut PyObject) -> c_int;
31
32 #[cfg(not(any(PyPy, GraalPy)))]
33 pub fn PyObject_GET_WEAKREFS_LISTPTR(o: *mut PyObject) -> *mut *mut PyObject;
34}
35
36#[inline]
40pub unsafe fn PyType_SUPPORTS_WEAKREFS(t: *mut PyTypeObject) -> c_int {
41 ((*t).tp_weaklistoffset > 0) as c_int
42}
43
44