mirror of
https://github.com/python/cpython.git
synced 2026-10-28 10:25:05 +08:00
61 lines
1.9 KiB
C
61 lines
1.9 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" // FRAME_STATE_FINISHED()
|
|
#include "pycore_interpframe_structs.h" // _PyGenObject
|
|
|
|
#include <stddef.h> // offsetof()
|
|
|
|
|
|
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);
|
|
}
|
|
|
|
// The generator finalizer is a no-op once its frame is cleared.
|
|
static inline int
|
|
_PyGen_FinalizerIsNoop(PyObject *op)
|
|
{
|
|
return Py_TYPE(op)->tp_finalize == PyGen_Type.tp_finalize &&
|
|
FRAME_STATE_FINISHED(((PyGenObject *)op)->gi_frame_state);
|
|
}
|
|
|
|
PyAPI_FUNC(PyObject *)_PyGen_yf(PyGenObject *);
|
|
extern int _PyGen_ClearFrame(PyGenObject *self);
|
|
|
|
// Export for '_asyncio' shared extension
|
|
PyAPI_FUNC(int) _PyGen_SetStopIterationValue(PyObject *);
|
|
|
|
// Export for '_asyncio' shared extension
|
|
PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **);
|
|
// Set the exception passed to throw(typ[, val[, tb]]).
|
|
// Return 0 on success, -1 on failure.
|
|
extern int _PyGen_SetException(PyObject *typ, PyObject *val, PyObject *tb);
|
|
|
|
PyAPI_FUNC(PyObject *)_PyCoro_GetAwaitableIter(PyObject *o);
|
|
PyAPI_FUNC(PyObject *)_PyAsyncGenValueWrapperNew(PyThreadState *state, PyObject *);
|
|
|
|
// Exported for external JIT support
|
|
PyAPI_FUNC(PyObject *) _PyCoro_ComputeOrigin(int origin_depth, _PyInterpreterFrame *current_frame);
|
|
|
|
extern PyTypeObject _PyCoroWrapper_Type;
|
|
extern PyTypeObject _PyAsyncGenWrappedValue_Type;
|
|
extern PyTypeObject _PyAsyncGenAThrow_Type;
|
|
|
|
PyAPI_FUNC(PySendResult) _PyAsyncGenASend_Send(PyObject *iter, PyObject *arg, PyObject **result);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* !Py_INTERNAL_GENOBJECT_H */
|