mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-07-29 22:28:08 -07:00
dev-python/cython: Improve py39 patch to avoid breaking py27
Signed-off-by: Michał Górny <mgorny@gentoo.org>
This commit is contained in:
@@ -1,59 +1,34 @@
|
||||
From 1bb26b964060392ecb08c3b6c8ca4626e5c1eec7 Mon Sep 17 00:00:00 2001
|
||||
From: Jeroen Demeyer <jeroen.k.demeyer@gmail.com>
|
||||
Date: Wed, 28 Aug 2019 10:56:28 +0200
|
||||
Subject: [PATCH] Always bind Cython functions
|
||||
From c29a7818d3b6806a457af698aec446d3d28d4f80 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
|
||||
Date: Sun, 14 Jun 2020 13:45:21 +0200
|
||||
Subject: [PATCH] Always bind Cython functions in py3
|
||||
|
||||
Rebased for cython 0.29.x, and made conditional to Python 3. This
|
||||
does not solve the original staticmethod problem in Python 2 but it does
|
||||
resolve classmethod problems in Python 3.9. Therefore, it unbreaks
|
||||
other packages on Python 3.9, improves overall state for Python 3
|
||||
and does not introduce regressions in Python 2.
|
||||
---
|
||||
Cython/Utility/CythonFunction.c | 15 ---------------
|
||||
tests/run/cyfunction.pyx | 12 ++++++++++++
|
||||
2 files changed, 12 insertions(+), 15 deletions(-)
|
||||
Cython/Utility/CythonFunction.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/Cython/Utility/CythonFunction.c b/Cython/Utility/CythonFunction.c
|
||||
index 01ff1e0dd4..0758548cb3 100644
|
||||
index a65c8eee36..33d0a4750a 100644
|
||||
--- a/Cython/Utility/CythonFunction.c
|
||||
+++ b/Cython/Utility/CythonFunction.c
|
||||
@@ -552,21 +552,6 @@ static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit,
|
||||
@@ -548,6 +548,7 @@ static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit,
|
||||
|
||||
static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type)
|
||||
{
|
||||
- __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
|
||||
-
|
||||
- if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) {
|
||||
- Py_INCREF(func);
|
||||
- return func;
|
||||
- }
|
||||
-
|
||||
- if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) {
|
||||
- if (type == NULL)
|
||||
- type = (PyObject *)(Py_TYPE(obj));
|
||||
- return __Pyx_PyMethod_New(func, type, (PyObject *)(Py_TYPE(type)));
|
||||
- }
|
||||
-
|
||||
- if (obj == Py_None)
|
||||
- obj = NULL;
|
||||
+#if PY_MAJOR_VERSION < 3
|
||||
__pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
|
||||
|
||||
if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) {
|
||||
@@ -563,6 +564,7 @@ static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObj
|
||||
|
||||
if (obj == Py_None)
|
||||
obj = NULL;
|
||||
+#endif
|
||||
return __Pyx_PyMethod_New(func, obj, type);
|
||||
}
|
||||
|
||||
diff --git a/tests/run/cyfunction.pyx b/tests/run/cyfunction.pyx
|
||||
index cbce48bcfc..bbd2cefb83 100644
|
||||
--- a/tests/run/cyfunction.pyx
|
||||
+++ b/tests/run/cyfunction.pyx
|
||||
@@ -376,6 +376,18 @@ class TestUnboundMethod:
|
||||
def meth(self): pass
|
||||
|
||||
|
||||
+class TestStaticmethod(object):
|
||||
+ """
|
||||
+ >>> x = TestStaticmethod()
|
||||
+ >>> x.staticmeth(42)
|
||||
+ 42
|
||||
+ >>> x.staticmeth.__get__(42)()
|
||||
+ 42
|
||||
+ """
|
||||
+ @staticmethod
|
||||
+ def staticmeth(arg): return arg
|
||||
+
|
||||
+
|
||||
cdef class TestOptimisedBuiltinMethod:
|
||||
"""
|
||||
>>> obj = TestOptimisedBuiltinMethod()
|
||||
|
||||
Reference in New Issue
Block a user