2021-12-09 12:59:26 -07: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
|
|
|
|
|
|
2024-06-24 10:23:38 +01:00
|
|
|
#include "pycore_frame.h"
|
|
|
|
|
|
|
|
|
|
/* _PyGenObject_HEAD defines the initial segment of generator
|
|
|
|
|
and coroutine objects. */
|
|
|
|
|
#define _PyGenObject_HEAD(prefix) \
|
|
|
|
|
PyObject_HEAD \
|
|
|
|
|
/* List of weak reference. */ \
|
|
|
|
|
PyObject *prefix##_weakreflist; \
|
|
|
|
|
/* Name of the generator. */ \
|
|
|
|
|
PyObject *prefix##_name; \
|
|
|
|
|
/* Qualified name of the generator. */ \
|
|
|
|
|
PyObject *prefix##_qualname; \
|
|
|
|
|
_PyErr_StackItem prefix##_exc_state; \
|
|
|
|
|
PyObject *prefix##_origin_or_finalizer; \
|
|
|
|
|
char prefix##_hooks_inited; \
|
|
|
|
|
char prefix##_closed; \
|
|
|
|
|
char prefix##_running_async; \
|
|
|
|
|
/* The frame */ \
|
|
|
|
|
int8_t prefix##_frame_state; \
|
|
|
|
|
struct _PyInterpreterFrame prefix##_iframe; \
|
|
|
|
|
|
|
|
|
|
struct _PyGenObject {
|
|
|
|
|
/* The gi_ prefix is intended to remind of generator-iterator. */
|
|
|
|
|
_PyGenObject_HEAD(gi)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct _PyCoroObject {
|
|
|
|
|
_PyGenObject_HEAD(cr)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct _PyAsyncGenObject {
|
|
|
|
|
_PyGenObject_HEAD(ag)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#undef _PyGenObject_HEAD
|
|
|
|
|
|
|
|
|
|
static inline
|
|
|
|
|
PyGenObject *_PyGen_GetGeneratorFromFrame(_PyInterpreterFrame *frame)
|
|
|
|
|
{
|
|
|
|
|
assert(frame->owner == FRAME_OWNED_BY_GENERATOR);
|
|
|
|
|
size_t offset_in_gen = offsetof(PyGenObject, gi_iframe);
|
|
|
|
|
return (PyGenObject *)(((char *)frame) - offset_in_gen);
|
|
|
|
|
}
|
2024-01-19 03:15:00 +09:00
|
|
|
|
2024-02-29 08:11:28 -08:00
|
|
|
PyAPI_FUNC(PyObject *)_PyGen_yf(PyGenObject *);
|
2023-07-22 16:21:16 +02:00
|
|
|
extern void _PyGen_Finalize(PyObject *self);
|
|
|
|
|
|
2023-07-25 03:44:11 +02:00
|
|
|
// Export for '_asyncio' shared extension
|
2023-07-22 16:21:16 +02:00
|
|
|
PyAPI_FUNC(int) _PyGen_SetStopIterationValue(PyObject *);
|
2023-08-24 18:06:53 +02:00
|
|
|
|
2023-07-25 03:44:11 +02:00
|
|
|
// Export for '_asyncio' shared extension
|
2023-07-22 16:21:16 +02:00
|
|
|
PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **);
|
|
|
|
|
|
2024-02-29 08:11:28 -08:00
|
|
|
PyAPI_FUNC(PyObject *)_PyCoro_GetAwaitableIter(PyObject *o);
|
2023-01-06 14:47:57 +00:00
|
|
|
extern PyObject *_PyAsyncGenValueWrapperNew(PyThreadState *state, PyObject *);
|
2021-12-09 12:59:26 -07:00
|
|
|
|
2023-07-22 16:21:16 +02:00
|
|
|
extern PyTypeObject _PyCoroWrapper_Type;
|
|
|
|
|
extern PyTypeObject _PyAsyncGenWrappedValue_Type;
|
|
|
|
|
extern PyTypeObject _PyAsyncGenAThrow_Type;
|
|
|
|
|
|
2021-12-09 12:59:26 -07:00
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#endif /* !Py_INTERNAL_GENOBJECT_H */
|