mirror of
https://github.com/python/cpython.git
synced 2024-11-28 08:20:55 +01:00
75 lines
2.7 KiB
C
75 lines
2.7 KiB
C
#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
|
|
|
|
#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);
|
|
}
|
|
|
|
PyAPI_FUNC(PyObject *)_PyGen_yf(PyGenObject *);
|
|
extern void _PyGen_Finalize(PyObject *self);
|
|
|
|
// Export for '_asyncio' shared extension
|
|
PyAPI_FUNC(int) _PyGen_SetStopIterationValue(PyObject *);
|
|
|
|
// Export for '_asyncio' shared extension
|
|
PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **);
|
|
|
|
PyAPI_FUNC(PyObject *)_PyCoro_GetAwaitableIter(PyObject *o);
|
|
extern PyObject *_PyAsyncGenValueWrapperNew(PyThreadState *state, PyObject *);
|
|
|
|
extern PyTypeObject _PyCoroWrapper_Type;
|
|
extern PyTypeObject _PyAsyncGenWrappedValue_Type;
|
|
extern PyTypeObject _PyAsyncGenAThrow_Type;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* !Py_INTERNAL_GENOBJECT_H */
|