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