You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.4 KiB
51 lines
1.4 KiB
https://bitbucket.org/ambroff/greenlet/changeset/f61fffb6feeb
|
|
|
|
--- greenlet.c
|
|
+++ greenlet.c
|
|
@@ -1267,7 +1267,11 @@
|
|
_PyGreenlet_API[PyGreenlet_SetParent_NUM] =
|
|
(void *) PyGreenlet_SetParent;
|
|
|
|
+#ifdef GREENLET_USE_PYCAPSULE
|
|
+ c_api_object = PyCapsule_New((void *) _PyGreenlet_API, "greenlet._C_API", NULL);
|
|
+#else
|
|
c_api_object = PyCObject_FromVoidPtr((void *) _PyGreenlet_API, NULL);
|
|
+#endif
|
|
if (c_api_object != NULL)
|
|
{
|
|
PyModule_AddObject(m, "_C_API", c_api_object);
|
|
--- greenlet.h
|
|
+++ greenlet.h
|
|
@@ -31,6 +31,10 @@
|
|
#define PyGreenlet_ACTIVE(op) (((PyGreenlet*)(op))->stack_start != NULL)
|
|
#define PyGreenlet_GET_PARENT(op) (((PyGreenlet*)(op))->parent)
|
|
|
|
+#if (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 7) || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 1) || PY_MAJOR_VERSION > 3
|
|
+#define GREENLET_USE_PYCAPSULE
|
|
+#endif
|
|
+
|
|
/* C API functions */
|
|
|
|
/* Total number of symbols that are exported */
|
|
@@ -108,6 +112,12 @@
|
|
_PyGreenlet_API[PyGreenlet_SetParent_NUM])
|
|
|
|
/* Macro that imports greenlet and initializes C API */
|
|
+#ifdef GREENLET_USE_PYCAPSULE
|
|
+#define PyGreenlet_Import() \
|
|
+{ \
|
|
+ _PyGreenlet_API = (void**)PyCapsule_Import("greenlet._C_API", 0); \
|
|
+}
|
|
+#else
|
|
#define PyGreenlet_Import() \
|
|
{ \
|
|
PyObject *module = PyImport_ImportModule("greenlet"); \
|
|
@@ -122,6 +132,7 @@
|
|
Py_DECREF(module); \
|
|
} \
|
|
}
|
|
+#endif
|
|
|
|
#endif /* GREENLET_MODULE */
|
|
|