pyforge_ffi/cpython/
genobject.rs1use 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 }
54
55extern_libpython! {
58 pub static mut PyCoro_Type: PyTypeObject;
59}
60
61#[inline]
64pub unsafe fn PyCoro_CheckExact(op: *mut PyObject) -> c_int {
65 PyObject_TypeCheck(op, &raw mut PyCoro_Type)
66}
67
68extern_libpython! {
74 pub static mut PyAsyncGen_Type: PyTypeObject;
75 }
79
80#[inline]
83pub unsafe fn PyAsyncGen_CheckExact(op: *mut PyObject) -> c_int {
84 PyObject_TypeCheck(op, &raw mut PyAsyncGen_Type)
85}
86
87