42 lines
1.0 KiB
C
42 lines
1.0 KiB
C
|
|
/* Greenlet object interface */
|
|
|
|
#ifndef Py_GREENLETOBJECT_H
|
|
#define Py_GREENLETOBJECT_H
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <Python.h>
|
|
|
|
typedef struct _greenlet {
|
|
PyObject_HEAD
|
|
char* stack_start;
|
|
char* stack_stop;
|
|
char* stack_copy;
|
|
long stack_saved;
|
|
struct _greenlet* stack_prev;
|
|
struct _greenlet* parent;
|
|
PyObject* run_info;
|
|
struct _frame* top_frame;
|
|
int recursion_depth;
|
|
PyObject* weakreflist;
|
|
} PyGreenlet;
|
|
|
|
extern PyTypeObject PyGreen_Type;
|
|
|
|
#define PyGreen_Check(op) PyObject_TypeCheck(op, &PyGreen_Type)
|
|
#define PyGreen_STARTED(op) (((PyGreenlet*)(op))->stack_stop != NULL)
|
|
#define PyGreen_ACTIVE(op) (((PyGreenlet*)(op))->stack_start != NULL)
|
|
#define PyGreen_GET_PARENT(op) (((PyGreenlet*)(op))->parent)
|
|
|
|
PyObject* PyGreen_New(PyObject* run, PyObject* parent);
|
|
PyObject* PyGreen_Current(void);
|
|
PyObject* PyGreen_Switch(PyObject* g, PyObject* args); /* g.switch(*args) */
|
|
int PyGreen_SetParent(PyObject* g, PyObject* nparent); /* g.parent = ... */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* !Py_GREENLETOBJECT_H */
|