17db96d56Sopenharmony_ci#ifndef Py_INTERNAL_GENOBJECT_H
27db96d56Sopenharmony_ci#define Py_INTERNAL_GENOBJECT_H
37db96d56Sopenharmony_ci#ifdef __cplusplus
47db96d56Sopenharmony_ciextern "C" {
57db96d56Sopenharmony_ci#endif
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci#ifndef Py_BUILD_CORE
87db96d56Sopenharmony_ci#  error "this header requires Py_BUILD_CORE define"
97db96d56Sopenharmony_ci#endif
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ciextern PyObject *_PyGen_yf(PyGenObject *);
127db96d56Sopenharmony_ciextern PyObject *_PyCoro_GetAwaitableIter(PyObject *o);
137db96d56Sopenharmony_ciextern PyObject *_PyAsyncGenValueWrapperNew(PyObject *);
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ci/* runtime lifecycle */
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ciextern void _PyAsyncGen_Fini(PyInterpreterState *);
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ci/* other API */
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci#ifndef WITH_FREELISTS
237db96d56Sopenharmony_ci// without freelists
247db96d56Sopenharmony_ci#  define _PyAsyncGen_MAXFREELIST 0
257db96d56Sopenharmony_ci#endif
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ci#ifndef _PyAsyncGen_MAXFREELIST
287db96d56Sopenharmony_ci#  define _PyAsyncGen_MAXFREELIST 80
297db96d56Sopenharmony_ci#endif
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_cistruct _Py_async_gen_state {
327db96d56Sopenharmony_ci#if _PyAsyncGen_MAXFREELIST > 0
337db96d56Sopenharmony_ci    /* Freelists boost performance 6-10%; they also reduce memory
347db96d56Sopenharmony_ci       fragmentation, as _PyAsyncGenWrappedValue and PyAsyncGenASend
357db96d56Sopenharmony_ci       are short-living objects that are instantiated for every
367db96d56Sopenharmony_ci       __anext__() call. */
377db96d56Sopenharmony_ci    struct _PyAsyncGenWrappedValue* value_freelist[_PyAsyncGen_MAXFREELIST];
387db96d56Sopenharmony_ci    int value_numfree;
397db96d56Sopenharmony_ci
407db96d56Sopenharmony_ci    struct PyAsyncGenASend* asend_freelist[_PyAsyncGen_MAXFREELIST];
417db96d56Sopenharmony_ci    int asend_numfree;
427db96d56Sopenharmony_ci#endif
437db96d56Sopenharmony_ci};
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ci#ifdef __cplusplus
477db96d56Sopenharmony_ci}
487db96d56Sopenharmony_ci#endif
497db96d56Sopenharmony_ci#endif /* !Py_INTERNAL_GENOBJECT_H */
50