1 | use crate::object::*; |
2 | use std::os::raw::c_int; |
3 | #[cfg (not(PyPy))] |
4 | use std::ptr::addr_of_mut; |
5 | |
6 | #[cfg (all(not(PyPy), Py_LIMITED_API, not(GraalPy)))] |
7 | opaque_struct!(PyWeakReference); |
8 | |
9 | #[cfg (all(not(PyPy), not(Py_LIMITED_API), not(GraalPy)))] |
10 | pub use crate::_PyWeakReference as PyWeakReference; |
11 | |
12 | #[cfg_attr (windows, link(name = "pythonXY" ))] |
13 | unsafeextern "C" { |
14 | pub unsafestatic mut _PyWeakref_RefType: PyTypeObject; |
15 | pub unsafestatic mut _PyWeakref_ProxyType: PyTypeObject; |
16 | pub unsafestatic mut _PyWeakref_CallableProxyType: PyTypeObject; |
17 | |
18 | #[cfg (PyPy)] |
19 | #[link_name = "PyPyWeakref_CheckRef" ] |
20 | pub fn PyWeakref_CheckRef(op: *mut PyObject) -> c_int; |
21 | |
22 | #[cfg (PyPy)] |
23 | #[link_name = "PyPyWeakref_CheckRefExact" ] |
24 | pub fn PyWeakref_CheckRefExact(op: *mut PyObject) -> c_int; |
25 | |
26 | #[cfg (PyPy)] |
27 | #[link_name = "PyPyWeakref_CheckProxy" ] |
28 | pub fn PyWeakref_CheckProxy(op: *mut PyObject) -> c_int; |
29 | } |
30 | |
31 | #[inline ] |
32 | #[cfg (not(PyPy))] |
33 | pub unsafe fn PyWeakref_CheckRef(op: *mut PyObject) -> c_int { |
34 | PyObject_TypeCheck(ob:op, tp:addr_of_mut!(_PyWeakref_RefType)) |
35 | } |
36 | |
37 | #[inline ] |
38 | #[cfg (not(PyPy))] |
39 | pub unsafe fn PyWeakref_CheckRefExact(op: *mut PyObject) -> c_int { |
40 | (Py_TYPE(ob:op) == addr_of_mut!(_PyWeakref_RefType)) as c_int |
41 | } |
42 | |
43 | #[inline ] |
44 | #[cfg (not(PyPy))] |
45 | pub unsafe fn PyWeakref_CheckProxy(op: *mut PyObject) -> c_int { |
46 | ((Py_TYPE(ob:op) == addr_of_mut!(_PyWeakref_ProxyType)) |
47 | || (Py_TYPE(ob:op) == addr_of_mut!(_PyWeakref_CallableProxyType))) as c_int |
48 | } |
49 | |
50 | #[inline ] |
51 | pub unsafe fn PyWeakref_Check(op: *mut PyObject) -> c_int { |
52 | (PyWeakref_CheckRef(op) != 0 || PyWeakref_CheckProxy(op) != 0) as c_int |
53 | } |
54 | |
55 | unsafeextern "C" { |
56 | #[cfg_attr (PyPy, link_name = "PyPyWeakref_NewRef" )] |
57 | pub unsafefn PyWeakref_NewRef(ob: *mut PyObject, callback: *mut PyObject) -> *mut PyObject; |
58 | #[cfg_attr (PyPy, link_name = "PyPyWeakref_NewProxy" )] |
59 | pub unsafefn PyWeakref_NewProxy(ob: *mut PyObject, callback: *mut PyObject) -> *mut PyObject; |
60 | #[cfg_attr (PyPy, link_name = "PyPyWeakref_GetObject" )] |
61 | #[cfg_attr ( |
62 | Py_3_13, |
63 | deprecated(note = "deprecated since Python 3.13. Use `PyWeakref_GetRef` instead." ) |
64 | )] |
65 | pub unsafefn PyWeakref_GetObject(reference: *mut PyObject) -> *mut PyObject; |
66 | #[cfg (Py_3_13)] |
67 | #[cfg_attr (PyPy, link_name = "PyPyWeakref_GetRef" )] |
68 | pub fn PyWeakref_GetRef(reference: *mut PyObject, pobj: *mut *mut PyObject) -> c_int; |
69 | } |
70 | |