pyo3_ffi/cpython/
genobject.rs

1use crate::object::*;
2use crate::PyFrameObject;
3#[cfg(not(any(PyPy, GraalPy, Py_3_14)))]
4use crate::_PyErr_StackItem;
5#[cfg(all(Py_3_11, not(any(PyPy, GraalPy, Py_3_14))))]
6use std::os::raw::c_char;
7use std::os::raw::c_int;
8use std::ptr::addr_of_mut;
9
10#[cfg(not(any(PyPy, GraalPy, Py_3_14)))]
11#[repr(C)]
12pub struct PyGenObject {
13    pub ob_base: PyObject,
14    #[cfg(not(Py_3_11))]
15    pub gi_frame: *mut PyFrameObject,
16    #[cfg(not(Py_3_10))]
17    pub gi_running: c_int,
18    #[cfg(not(Py_3_12))]
19    pub gi_code: *mut PyObject,
20    pub gi_weakreflist: *mut PyObject,
21    pub gi_name: *mut PyObject,
22    pub gi_qualname: *mut PyObject,
23    pub gi_exc_state: _PyErr_StackItem,
24    #[cfg(Py_3_11)]
25    pub gi_origin_or_finalizer: *mut PyObject,
26    #[cfg(Py_3_11)]
27    pub gi_hooks_inited: c_char,
28    #[cfg(Py_3_11)]
29    pub gi_closed: c_char,
30    #[cfg(Py_3_11)]
31    pub gi_running_async: c_char,
32    #[cfg(Py_3_11)]
33    pub gi_frame_state: i8,
34    #[cfg(Py_3_11)]
35    pub gi_iframe: [*mut PyObject; 1],
36}
37
38#[cfg(all(Py_3_14, not(any(PyPy, GraalPy))))]
39opaque_struct!(PyGenObject);
40
41#[cfg_attr(windows, link(name = "pythonXY"))]
42extern "C" {
43    pub static mut PyGen_Type: PyTypeObject;
44}
45
46#[inline]
47pub unsafe fn PyGen_Check(op: *mut PyObject) -> c_int {
48    PyObject_TypeCheck(op, addr_of_mut!(PyGen_Type))
49}
50
51#[inline]
52pub unsafe fn PyGen_CheckExact(op: *mut PyObject) -> c_int {
53    (Py_TYPE(op) == addr_of_mut!(PyGen_Type)) as c_int
54}
55
56extern "C" {
57    pub fn PyGen_New(frame: *mut PyFrameObject) -> *mut PyObject;
58    // skipped PyGen_NewWithQualName
59    // skipped _PyGen_SetStopIterationValue
60    // skipped _PyGen_FetchStopIterationValue
61    // skipped _PyGen_yf
62    // skipped _PyGen_Finalize
63    #[cfg(not(any(Py_3_9, PyPy)))]
64    #[deprecated(note = "This function was never documented in the Python API.")]
65    pub fn PyGen_NeedsFinalizing(op: *mut PyGenObject) -> c_int;
66}
67
68// skipped PyCoroObject
69
70#[cfg_attr(windows, link(name = "pythonXY"))]
71extern "C" {
72    pub static mut PyCoro_Type: PyTypeObject;
73    pub static mut _PyCoroWrapper_Type: PyTypeObject;
74}
75
76#[inline]
77pub unsafe fn PyCoro_CheckExact(op: *mut PyObject) -> c_int {
78    PyObject_TypeCheck(op, addr_of_mut!(PyCoro_Type))
79}
80
81// skipped _PyCoro_GetAwaitableIter
82// skipped PyCoro_New
83
84// skipped PyAsyncGenObject
85
86#[cfg_attr(windows, link(name = "pythonXY"))]
87extern "C" {
88    pub static mut PyAsyncGen_Type: PyTypeObject;
89    // skipped _PyAsyncGenASend_Type
90    // skipped _PyAsyncGenWrappedValue_Type
91    // skipped _PyAsyncGenAThrow_Type
92}
93
94// skipped PyAsyncGen_New
95
96#[inline]
97pub unsafe fn PyAsyncGen_CheckExact(op: *mut PyObject) -> c_int {
98    PyObject_TypeCheck(op, addr_of_mut!(PyAsyncGen_Type))
99}
100
101// skipped _PyAsyncGenValueWrapperNew
⚠️ Internal Docs ⚠️ Not Public API 👉 Official Docs Here