blob: d29fb1ed1dfcbd2e9a90d598876b7c5a7fd76c24 [file] [log] [blame]
Martin v. Löwise440e472004-06-01 15:22:42 +00001
2/* Generator object interface */
3
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00004#ifndef Py_LIMITED_API
Martin v. Löwise440e472004-06-01 15:22:42 +00005#ifndef Py_GENOBJECT_H
6#define Py_GENOBJECT_H
7#ifdef __cplusplus
8extern "C" {
9#endif
10
Martin v. Löwis8d97e332004-06-27 15:43:12 +000011struct _frame; /* Avoid including frameobject.h */
12
Martin v. Löwise440e472004-06-01 15:22:42 +000013typedef struct {
14 PyObject_HEAD
15 /* The gi_ prefix is intended to remind of generator-iterator. */
16
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000017 /* Note: gi_frame can be NULL if the generator is "finished" */
Martin v. Löwis8d97e332004-06-27 15:43:12 +000018 struct _frame *gi_frame;
Martin v. Löwise440e472004-06-01 15:22:42 +000019
20 /* True if generator is being executed. */
21 int gi_running;
Christian Heimesaf98da12008-01-27 15:18:18 +000022
23 /* The code object backing the generator */
24 PyObject *gi_code;
Martin v. Löwise440e472004-06-01 15:22:42 +000025
26 /* List of weak reference. */
27 PyObject *gi_weakreflist;
28} PyGenObject;
29
30PyAPI_DATA(PyTypeObject) PyGen_Type;
31
32#define PyGen_Check(op) PyObject_TypeCheck(op, &PyGen_Type)
Christian Heimes90aa7642007-12-19 02:45:37 +000033#define PyGen_CheckExact(op) (Py_TYPE(op) == &PyGen_Type)
Martin v. Löwise440e472004-06-01 15:22:42 +000034
Martin v. Löwis8d97e332004-06-27 15:43:12 +000035PyAPI_FUNC(PyObject *) PyGen_New(struct _frame *);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000036PyAPI_FUNC(int) PyGen_NeedsFinalizing(PyGenObject *);
Martin v. Löwise440e472004-06-01 15:22:42 +000037
38#ifdef __cplusplus
39}
40#endif
41#endif /* !Py_GENOBJECT_H */
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000042#endif /* Py_LIMITED_API */