17db96d56Sopenharmony_ci/* Generator object interface */ 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ci#ifndef Py_LIMITED_API 47db96d56Sopenharmony_ci#ifndef Py_GENOBJECT_H 57db96d56Sopenharmony_ci#define Py_GENOBJECT_H 67db96d56Sopenharmony_ci#ifdef __cplusplus 77db96d56Sopenharmony_ciextern "C" { 87db96d56Sopenharmony_ci#endif 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci/* --- Generators --------------------------------------------------------- */ 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci/* _PyGenObject_HEAD defines the initial segment of generator 137db96d56Sopenharmony_ci and coroutine objects. */ 147db96d56Sopenharmony_ci#define _PyGenObject_HEAD(prefix) \ 157db96d56Sopenharmony_ci PyObject_HEAD \ 167db96d56Sopenharmony_ci /* The code object backing the generator */ \ 177db96d56Sopenharmony_ci PyCodeObject *prefix##_code; \ 187db96d56Sopenharmony_ci /* List of weak reference. */ \ 197db96d56Sopenharmony_ci PyObject *prefix##_weakreflist; \ 207db96d56Sopenharmony_ci /* Name of the generator. */ \ 217db96d56Sopenharmony_ci PyObject *prefix##_name; \ 227db96d56Sopenharmony_ci /* Qualified name of the generator. */ \ 237db96d56Sopenharmony_ci PyObject *prefix##_qualname; \ 247db96d56Sopenharmony_ci _PyErr_StackItem prefix##_exc_state; \ 257db96d56Sopenharmony_ci PyObject *prefix##_origin_or_finalizer; \ 267db96d56Sopenharmony_ci char prefix##_hooks_inited; \ 277db96d56Sopenharmony_ci char prefix##_closed; \ 287db96d56Sopenharmony_ci char prefix##_running_async; \ 297db96d56Sopenharmony_ci /* The frame */ \ 307db96d56Sopenharmony_ci int8_t prefix##_frame_state; \ 317db96d56Sopenharmony_ci PyObject *prefix##_iframe[1]; 327db96d56Sopenharmony_ci 337db96d56Sopenharmony_citypedef struct { 347db96d56Sopenharmony_ci /* The gi_ prefix is intended to remind of generator-iterator. */ 357db96d56Sopenharmony_ci _PyGenObject_HEAD(gi) 367db96d56Sopenharmony_ci} PyGenObject; 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ciPyAPI_DATA(PyTypeObject) PyGen_Type; 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_ci#define PyGen_Check(op) PyObject_TypeCheck(op, &PyGen_Type) 417db96d56Sopenharmony_ci#define PyGen_CheckExact(op) Py_IS_TYPE(op, &PyGen_Type) 427db96d56Sopenharmony_ci 437db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyGen_New(PyFrameObject *); 447db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyGen_NewWithQualName(PyFrameObject *, 457db96d56Sopenharmony_ci PyObject *name, PyObject *qualname); 467db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyGen_SetStopIterationValue(PyObject *); 477db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **); 487db96d56Sopenharmony_ciPyAPI_FUNC(void) _PyGen_Finalize(PyObject *self); 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci 517db96d56Sopenharmony_ci/* --- PyCoroObject ------------------------------------------------------- */ 527db96d56Sopenharmony_ci 537db96d56Sopenharmony_citypedef struct { 547db96d56Sopenharmony_ci _PyGenObject_HEAD(cr) 557db96d56Sopenharmony_ci} PyCoroObject; 567db96d56Sopenharmony_ci 577db96d56Sopenharmony_ciPyAPI_DATA(PyTypeObject) PyCoro_Type; 587db96d56Sopenharmony_ciPyAPI_DATA(PyTypeObject) _PyCoroWrapper_Type; 597db96d56Sopenharmony_ci 607db96d56Sopenharmony_ci#define PyCoro_CheckExact(op) Py_IS_TYPE(op, &PyCoro_Type) 617db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyCoro_New(PyFrameObject *, 627db96d56Sopenharmony_ci PyObject *name, PyObject *qualname); 637db96d56Sopenharmony_ci 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ci/* --- Asynchronous Generators -------------------------------------------- */ 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_citypedef struct { 687db96d56Sopenharmony_ci _PyGenObject_HEAD(ag) 697db96d56Sopenharmony_ci} PyAsyncGenObject; 707db96d56Sopenharmony_ci 717db96d56Sopenharmony_ciPyAPI_DATA(PyTypeObject) PyAsyncGen_Type; 727db96d56Sopenharmony_ciPyAPI_DATA(PyTypeObject) _PyAsyncGenASend_Type; 737db96d56Sopenharmony_ciPyAPI_DATA(PyTypeObject) _PyAsyncGenWrappedValue_Type; 747db96d56Sopenharmony_ciPyAPI_DATA(PyTypeObject) _PyAsyncGenAThrow_Type; 757db96d56Sopenharmony_ci 767db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyAsyncGen_New(PyFrameObject *, 777db96d56Sopenharmony_ci PyObject *name, PyObject *qualname); 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci#define PyAsyncGen_CheckExact(op) Py_IS_TYPE(op, &PyAsyncGen_Type) 807db96d56Sopenharmony_ci 817db96d56Sopenharmony_ci 827db96d56Sopenharmony_ci#undef _PyGenObject_HEAD 837db96d56Sopenharmony_ci 847db96d56Sopenharmony_ci#ifdef __cplusplus 857db96d56Sopenharmony_ci} 867db96d56Sopenharmony_ci#endif 877db96d56Sopenharmony_ci#endif /* !Py_GENOBJECT_H */ 887db96d56Sopenharmony_ci#endif /* Py_LIMITED_API */ 89