Skip to main content

pyo3_ffi/cpython/
objimpl.rs

1use 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// skipped _PyObject_SIZE
11// skipped _PyObject_VAR_SIZE
12
13// skipped _Py_GetAllocatedBlocks
14
15#[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// skipped _PyObject_GC_Malloc
37// skipped _PyObject_GC_Calloc
38
39#[inline]
40pub unsafe fn PyType_SUPPORTS_WEAKREFS(t: *mut PyTypeObject) -> c_int {
41    ((*t).tp_weaklistoffset > 0) as c_int
42}
43
44// skipped PyUnstable_Object_GC_NewWithExtraData