| extern "C" { | |
| extern PyObject *_PyGen_yf(PyGenObject *); | |
| extern PyObject *_PyCoro_GetAwaitableIter(PyObject *o); | |
| extern PyObject *_PyAsyncGenValueWrapperNew(PyObject *); | |
| /* runtime lifecycle */ | |
| extern void _PyAsyncGen_Fini(PyInterpreterState *); | |
| /* other API */ | |
| // without freelists | |
| struct _Py_async_gen_state { | |
| /* Freelists boost performance 6-10%; they also reduce memory | |
| fragmentation, as _PyAsyncGenWrappedValue and PyAsyncGenASend | |
| are short-living objects that are instantiated for every | |
| __anext__() call. */ | |
| struct _PyAsyncGenWrappedValue* value_freelist[_PyAsyncGen_MAXFREELIST]; | |
| int value_numfree; | |
| struct PyAsyncGenASend* asend_freelist[_PyAsyncGen_MAXFREELIST]; | |
| int asend_numfree; | |
| }; | |
| } | |