2021-12-09 15:59:26 -04:00
|
|
|
#ifndef Py_INTERNAL_GENOBJECT_H
|
|
|
|
#define Py_INTERNAL_GENOBJECT_H
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef Py_BUILD_CORE
|
|
|
|
# error "this header requires Py_BUILD_CORE define"
|
|
|
|
#endif
|
|
|
|
|
2022-02-25 11:07:14 -04:00
|
|
|
extern PyObject *_PyGen_yf(PyGenObject *);
|
2023-07-22 11:21:16 -03:00
|
|
|
extern void _PyGen_Finalize(PyObject *self);
|
|
|
|
|
2023-07-24 22:44:11 -03:00
|
|
|
// Export for '_asyncio' shared extension
|
2023-07-22 11:21:16 -03:00
|
|
|
PyAPI_FUNC(int) _PyGen_SetStopIterationValue(PyObject *);
|
2023-07-24 22:44:11 -03:00
|
|
|
// Export for '_asyncio' shared extension
|
2023-07-22 11:21:16 -03:00
|
|
|
PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **);
|
|
|
|
|
2022-02-25 11:07:14 -04:00
|
|
|
extern PyObject *_PyCoro_GetAwaitableIter(PyObject *o);
|
2023-01-06 10:47:57 -04:00
|
|
|
extern PyObject *_PyAsyncGenValueWrapperNew(PyThreadState *state, PyObject *);
|
2021-12-09 15:59:26 -04:00
|
|
|
|
2023-07-22 11:21:16 -03:00
|
|
|
extern PyTypeObject _PyCoroWrapper_Type;
|
|
|
|
extern PyTypeObject _PyAsyncGenWrappedValue_Type;
|
|
|
|
extern PyTypeObject _PyAsyncGenAThrow_Type;
|
|
|
|
|
2021-12-09 15:59:26 -04:00
|
|
|
/* runtime lifecycle */
|
|
|
|
|
|
|
|
extern void _PyAsyncGen_Fini(PyInterpreterState *);
|
|
|
|
|
|
|
|
|
|
|
|
/* other API */
|
|
|
|
|
|
|
|
#ifndef WITH_FREELISTS
|
|
|
|
// without freelists
|
|
|
|
# define _PyAsyncGen_MAXFREELIST 0
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _PyAsyncGen_MAXFREELIST
|
|
|
|
# define _PyAsyncGen_MAXFREELIST 80
|
|
|
|
#endif
|
|
|
|
|
|
|
|
struct _Py_async_gen_state {
|
|
|
|
#if _PyAsyncGen_MAXFREELIST > 0
|
|
|
|
/* 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;
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif /* !Py_INTERNAL_GENOBJECT_H */
|