Skip to main content

pyforge_ffi/cpython/
genobject.rs

1use crate::object::*;
2use crate::PyFrameObject;
3#[cfg(not(Py_3_14))]
4use std::ffi::c_char;
5use std::ffi::c_int;
6
7#[cfg(not(Py_3_14))]
8#[repr(C)]
9pub struct PyGenObject {
10    pub ob_base: PyObject,
11    #[cfg(not(Py_3_12))]
12    pub gi_code: *mut PyObject,
13    pub gi_weakreflist: *mut PyObject,
14    pub gi_name: *mut PyObject,
15    pub gi_qualname: *mut PyObject,
16    #[allow(
17        private_interfaces,
18        reason = "PyGenObject layout was public until 3.14"
19    )]
20    pub gi_exc_state: crate::cpython::pystate::_PyErr_StackItem,
21    pub gi_origin_or_finalizer: *mut PyObject,
22    pub gi_hooks_inited: c_char,
23    pub gi_closed: c_char,
24    pub gi_running_async: c_char,
25    pub gi_frame_state: i8,
26    pub gi_iframe: [*mut PyObject; 1],
27}
28
29#[cfg(Py_3_14)]
30opaque_struct!(pub PyGenObject);
31
32extern_libpython! {
33    pub static mut PyGen_Type: PyTypeObject;
34}
35
36#[inline]
37pub unsafe fn PyGen_Check(op: *mut PyObject) -> c_int {
38    PyObject_TypeCheck(op, &raw mut PyGen_Type)
39}
40
41#[inline]
42pub unsafe fn PyGen_CheckExact(op: *mut PyObject) -> c_int {
43    (Py_TYPE(op) == &raw mut PyGen_Type) as c_int
44}
45
46extern_libpython! {
47    pub fn PyGen_New(frame: *mut PyFrameObject) -> *mut PyObject;
48    // skipped PyGen_NewWithQualName
49    // skipped _PyGen_SetStopIterationValue
50    // skipped _PyGen_FetchStopIterationValue
51    // skipped _PyGen_yf
52    // skipped _PyGen_Finalize
53}
54
55// skipped PyCoroObject
56
57extern_libpython! {
58    pub static mut PyCoro_Type: PyTypeObject;
59}
60
61// skipped _PyCoroWrapper_Type
62
63#[inline]
64pub unsafe fn PyCoro_CheckExact(op: *mut PyObject) -> c_int {
65    PyObject_TypeCheck(op, &raw mut PyCoro_Type)
66}
67
68// skipped _PyCoro_GetAwaitableIter
69// skipped PyCoro_New
70
71// skipped PyAsyncGenObject
72
73extern_libpython! {
74    pub static mut PyAsyncGen_Type: PyTypeObject;
75    // skipped _PyAsyncGenASend_Type
76    // skipped _PyAsyncGenWrappedValue_Type
77    // skipped _PyAsyncGenAThrow_Type
78}
79
80// skipped PyAsyncGen_New
81
82#[inline]
83pub unsafe fn PyAsyncGen_CheckExact(op: *mut PyObject) -> c_int {
84    PyObject_TypeCheck(op, &raw mut PyAsyncGen_Type)
85}
86
87// skipped _PyAsyncGenValueWrapperNew