(root)/
Python-3.11.7/
Include/
cpython/
genobject.h
       1  /* Generator object interface */
       2  
       3  #ifndef Py_LIMITED_API
       4  #ifndef Py_GENOBJECT_H
       5  #define Py_GENOBJECT_H
       6  #ifdef __cplusplus
       7  extern "C" {
       8  #endif
       9  
      10  /* --- Generators --------------------------------------------------------- */
      11  
      12  /* _PyGenObject_HEAD defines the initial segment of generator
      13     and coroutine objects. */
      14  #define _PyGenObject_HEAD(prefix)                                           \
      15      PyObject_HEAD                                                           \
      16      /* The code object backing the generator */                             \
      17      PyCodeObject *prefix##_code;                                            \
      18      /* List of weak reference. */                                           \
      19      PyObject *prefix##_weakreflist;                                         \
      20      /* Name of the generator. */                                            \
      21      PyObject *prefix##_name;                                                \
      22      /* Qualified name of the generator. */                                  \
      23      PyObject *prefix##_qualname;                                            \
      24      _PyErr_StackItem prefix##_exc_state;                                    \
      25      PyObject *prefix##_origin_or_finalizer;                                 \
      26      char prefix##_hooks_inited;                                             \
      27      char prefix##_closed;                                                   \
      28      char prefix##_running_async;                                            \
      29      /* The frame */                                                         \
      30      int8_t prefix##_frame_state;                                            \
      31      PyObject *prefix##_iframe[1];
      32  
      33  typedef struct {
      34      /* The gi_ prefix is intended to remind of generator-iterator. */
      35      _PyGenObject_HEAD(gi)
      36  } PyGenObject;
      37  
      38  PyAPI_DATA(PyTypeObject) PyGen_Type;
      39  
      40  #define PyGen_Check(op) PyObject_TypeCheck(op, &PyGen_Type)
      41  #define PyGen_CheckExact(op) Py_IS_TYPE(op, &PyGen_Type)
      42  
      43  PyAPI_FUNC(PyObject *) PyGen_New(PyFrameObject *);
      44  PyAPI_FUNC(PyObject *) PyGen_NewWithQualName(PyFrameObject *,
      45      PyObject *name, PyObject *qualname);
      46  PyAPI_FUNC(int) _PyGen_SetStopIterationValue(PyObject *);
      47  PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **);
      48  PyAPI_FUNC(void) _PyGen_Finalize(PyObject *self);
      49  
      50  
      51  /* --- PyCoroObject ------------------------------------------------------- */
      52  
      53  typedef struct {
      54      _PyGenObject_HEAD(cr)
      55  } PyCoroObject;
      56  
      57  PyAPI_DATA(PyTypeObject) PyCoro_Type;
      58  PyAPI_DATA(PyTypeObject) _PyCoroWrapper_Type;
      59  
      60  #define PyCoro_CheckExact(op) Py_IS_TYPE(op, &PyCoro_Type)
      61  PyAPI_FUNC(PyObject *) PyCoro_New(PyFrameObject *,
      62      PyObject *name, PyObject *qualname);
      63  
      64  
      65  /* --- Asynchronous Generators -------------------------------------------- */
      66  
      67  typedef struct {
      68      _PyGenObject_HEAD(ag)
      69  } PyAsyncGenObject;
      70  
      71  PyAPI_DATA(PyTypeObject) PyAsyncGen_Type;
      72  PyAPI_DATA(PyTypeObject) _PyAsyncGenASend_Type;
      73  PyAPI_DATA(PyTypeObject) _PyAsyncGenWrappedValue_Type;
      74  PyAPI_DATA(PyTypeObject) _PyAsyncGenAThrow_Type;
      75  
      76  PyAPI_FUNC(PyObject *) PyAsyncGen_New(PyFrameObject *,
      77      PyObject *name, PyObject *qualname);
      78  
      79  #define PyAsyncGen_CheckExact(op) Py_IS_TYPE(op, &PyAsyncGen_Type)
      80  
      81  
      82  #undef _PyGenObject_HEAD
      83  
      84  #ifdef __cplusplus
      85  }
      86  #endif
      87  #endif /* !Py_GENOBJECT_H */
      88  #endif /* Py_LIMITED_API */