| | |
| |
|
| | |
| |
|
| | #ifndef Py_GREENLETOBJECT_H |
| | #define Py_GREENLETOBJECT_H |
| |
|
| |
|
| | #include <Python.h> |
| |
|
| | #ifdef __cplusplus |
| | extern "C" { |
| | #endif |
| |
|
| | |
| | #define GREENLET_VERSION "1.0.0" |
| |
|
| | #ifndef GREENLET_MODULE |
| | #define implementation_ptr_t void* |
| | #endif |
| |
|
| | typedef struct _greenlet { |
| | PyObject_HEAD |
| | PyObject* weakreflist; |
| | PyObject* dict; |
| | implementation_ptr_t pimpl; |
| | } PyGreenlet; |
| |
|
| | #define PyGreenlet_Check(op) (op && PyObject_TypeCheck(op, &PyGreenlet_Type)) |
| |
|
| |
|
| | |
| |
|
| | |
| | #define PyGreenlet_API_pointers 12 |
| |
|
| | #define PyGreenlet_Type_NUM 0 |
| | #define PyExc_GreenletError_NUM 1 |
| | #define PyExc_GreenletExit_NUM 2 |
| |
|
| | #define PyGreenlet_New_NUM 3 |
| | #define PyGreenlet_GetCurrent_NUM 4 |
| | #define PyGreenlet_Throw_NUM 5 |
| | #define PyGreenlet_Switch_NUM 6 |
| | #define PyGreenlet_SetParent_NUM 7 |
| |
|
| | #define PyGreenlet_MAIN_NUM 8 |
| | #define PyGreenlet_STARTED_NUM 9 |
| | #define PyGreenlet_ACTIVE_NUM 10 |
| | #define PyGreenlet_GET_PARENT_NUM 11 |
| |
|
| | #ifndef GREENLET_MODULE |
| | |
| | static void** _PyGreenlet_API = NULL; |
| |
|
| | # define PyGreenlet_Type \ |
| | (*(PyTypeObject*)_PyGreenlet_API[PyGreenlet_Type_NUM]) |
| |
|
| | # define PyExc_GreenletError \ |
| | ((PyObject*)_PyGreenlet_API[PyExc_GreenletError_NUM]) |
| |
|
| | # define PyExc_GreenletExit \ |
| | ((PyObject*)_PyGreenlet_API[PyExc_GreenletExit_NUM]) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | # define PyGreenlet_New \ |
| | (*(PyGreenlet * (*)(PyObject * run, PyGreenlet * parent)) \ |
| | _PyGreenlet_API[PyGreenlet_New_NUM]) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | # define PyGreenlet_GetCurrent \ |
| | (*(PyGreenlet * (*)(void)) _PyGreenlet_API[PyGreenlet_GetCurrent_NUM]) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | # define PyGreenlet_Throw \ |
| | (*(PyObject * (*)(PyGreenlet * self, \ |
| | PyObject * typ, \ |
| | PyObject * val, \ |
| | PyObject * tb)) \ |
| | _PyGreenlet_API[PyGreenlet_Throw_NUM]) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | # define PyGreenlet_Switch \ |
| | (*(PyObject * \ |
| | (*)(PyGreenlet * greenlet, PyObject * args, PyObject * kwargs)) \ |
| | _PyGreenlet_API[PyGreenlet_Switch_NUM]) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | # define PyGreenlet_SetParent \ |
| | (*(int (*)(PyGreenlet * greenlet, PyGreenlet * nparent)) \ |
| | _PyGreenlet_API[PyGreenlet_SetParent_NUM]) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | # define PyGreenlet_GetParent \ |
| | (*(PyGreenlet* (*)(PyGreenlet*)) \ |
| | _PyGreenlet_API[PyGreenlet_GET_PARENT_NUM]) |
| |
|
| | |
| | |
| | |
| | # define PyGreenlet_GET_PARENT PyGreenlet_GetParent |
| |
|
| | # define PyGreenlet_MAIN \ |
| | (*(int (*)(PyGreenlet*)) \ |
| | _PyGreenlet_API[PyGreenlet_MAIN_NUM]) |
| |
|
| | # define PyGreenlet_STARTED \ |
| | (*(int (*)(PyGreenlet*)) \ |
| | _PyGreenlet_API[PyGreenlet_STARTED_NUM]) |
| |
|
| | # define PyGreenlet_ACTIVE \ |
| | (*(int (*)(PyGreenlet*)) \ |
| | _PyGreenlet_API[PyGreenlet_ACTIVE_NUM]) |
| |
|
| |
|
| |
|
| |
|
| | |
| | |
| | |
| | |
| | # define PyGreenlet_Import() \ |
| | { \ |
| | _PyGreenlet_API = (void**)PyCapsule_Import("greenlet._C_API", 0); \ |
| | } |
| |
|
| | #endif |
| |
|
| | #ifdef __cplusplus |
| | } |
| | #endif |
| | #endif |
| |
|