aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/src/Include/genobject.h
blob: 2e5e15e196c6b2894d1f02f2188b7501f4dc81c0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
 
/* Generator object interface */ 
 
#ifndef Py_LIMITED_API 
#ifndef Py_GENOBJECT_H 
#define Py_GENOBJECT_H 
#ifdef __cplusplus 
extern "C" { 
#endif 
 
#include "pystate.h"   /* _PyErr_StackItem */

/* _PyGenObject_HEAD defines the initial segment of generator 
   and coroutine objects. */ 
#define _PyGenObject_HEAD(prefix)                                           \ 
    PyObject_HEAD                                                           \ 
    /* Note: gi_frame can be NULL if the generator is "finished" */         \ 
    PyFrameObject *prefix##_frame;                                          \
    /* True if generator is being executed. */                              \ 
    char prefix##_running;                                                  \ 
    /* The code object backing the generator */                             \ 
    PyObject *prefix##_code;                                                \ 
    /* 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; 
 
typedef struct { 
    /* The gi_ prefix is intended to remind of generator-iterator. */ 
    _PyGenObject_HEAD(gi) 
} PyGenObject; 
 
PyAPI_DATA(PyTypeObject) PyGen_Type; 
 
#define PyGen_Check(op) PyObject_TypeCheck(op, &PyGen_Type) 
#define PyGen_CheckExact(op) Py_IS_TYPE(op, &PyGen_Type)
 
PyAPI_FUNC(PyObject *) PyGen_New(PyFrameObject *);
PyAPI_FUNC(PyObject *) PyGen_NewWithQualName(PyFrameObject *,
    PyObject *name, PyObject *qualname); 
PyAPI_FUNC(int) _PyGen_SetStopIterationValue(PyObject *); 
PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **); 
PyAPI_FUNC(PyObject *) _PyGen_Send(PyGenObject *, PyObject *); 
PyObject *_PyGen_yf(PyGenObject *); 
PyAPI_FUNC(void) _PyGen_Finalize(PyObject *self); 
 
#ifndef Py_LIMITED_API 
typedef struct { 
    _PyGenObject_HEAD(cr) 
    PyObject *cr_origin; 
} PyCoroObject; 
 
PyAPI_DATA(PyTypeObject) PyCoro_Type; 
PyAPI_DATA(PyTypeObject) _PyCoroWrapper_Type; 
 
#define PyCoro_CheckExact(op) Py_IS_TYPE(op, &PyCoro_Type)
PyObject *_PyCoro_GetAwaitableIter(PyObject *o); 
PyAPI_FUNC(PyObject *) PyCoro_New(PyFrameObject *,
    PyObject *name, PyObject *qualname); 
 
/* Asynchronous Generators */ 
 
typedef struct { 
    _PyGenObject_HEAD(ag) 
    PyObject *ag_finalizer; 
 
    /* Flag is set to 1 when hooks set up by sys.set_asyncgen_hooks 
       were called on the generator, to avoid calling them more 
       than once. */ 
    int ag_hooks_inited; 
 
    /* Flag is set to 1 when aclose() is called for the first time, or 
       when a StopAsyncIteration exception is raised. */ 
    int ag_closed; 

    int ag_running_async;
} PyAsyncGenObject; 
 
PyAPI_DATA(PyTypeObject) PyAsyncGen_Type; 
PyAPI_DATA(PyTypeObject) _PyAsyncGenASend_Type; 
PyAPI_DATA(PyTypeObject) _PyAsyncGenWrappedValue_Type; 
PyAPI_DATA(PyTypeObject) _PyAsyncGenAThrow_Type; 
 
PyAPI_FUNC(PyObject *) PyAsyncGen_New(PyFrameObject *,
    PyObject *name, PyObject *qualname); 
 
#define PyAsyncGen_CheckExact(op) Py_IS_TYPE(op, &PyAsyncGen_Type)
 
PyObject *_PyAsyncGenValueWrapperNew(PyObject *); 
 
#endif 
 
#undef _PyGenObject_HEAD 
 
#ifdef __cplusplus 
} 
#endif 
#endif /* !Py_GENOBJECT_H */ 
#endif /* Py_LIMITED_API */