(root)/
Python-3.11.7/
Include/
internal/
pycore_genobject.h
       1  #ifndef Py_INTERNAL_GENOBJECT_H
       2  #define Py_INTERNAL_GENOBJECT_H
       3  #ifdef __cplusplus
       4  extern "C" {
       5  #endif
       6  
       7  #ifndef Py_BUILD_CORE
       8  #  error "this header requires Py_BUILD_CORE define"
       9  #endif
      10  
      11  extern PyObject *_PyGen_yf(PyGenObject *);
      12  extern PyObject *_PyCoro_GetAwaitableIter(PyObject *o);
      13  extern PyObject *_PyAsyncGenValueWrapperNew(PyObject *);
      14  
      15  /* runtime lifecycle */
      16  
      17  extern void _PyAsyncGen_Fini(PyInterpreterState *);
      18  
      19  
      20  /* other API */
      21  
      22  #ifndef WITH_FREELISTS
      23  // without freelists
      24  #  define _PyAsyncGen_MAXFREELIST 0
      25  #endif
      26  
      27  #ifndef _PyAsyncGen_MAXFREELIST
      28  #  define _PyAsyncGen_MAXFREELIST 80
      29  #endif
      30  
      31  struct _Py_async_gen_state {
      32  #if _PyAsyncGen_MAXFREELIST > 0
      33      /* Freelists boost performance 6-10%; they also reduce memory
      34         fragmentation, as _PyAsyncGenWrappedValue and PyAsyncGenASend
      35         are short-living objects that are instantiated for every
      36         __anext__() call. */
      37      struct _PyAsyncGenWrappedValue* value_freelist[_PyAsyncGen_MAXFREELIST];
      38      int value_numfree;
      39  
      40      struct PyAsyncGenASend* asend_freelist[_PyAsyncGen_MAXFREELIST];
      41      int asend_numfree;
      42  #endif
      43  };
      44  
      45  
      46  #ifdef __cplusplus
      47  }
      48  #endif
      49  #endif /* !Py_INTERNAL_GENOBJECT_H */