diff --git a/.gitignore b/.gitignore index c6b8516..6411db2 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,4 @@ Cython-0.12.1.tar.gz /Cython-0.29.16.tar.gz /Cython-0.29.17.tar.gz /Cython-0.29.19.tar.gz +/Cython-0.29.21.tar.gz diff --git a/Cython.spec b/Cython.spec index 41338d2..c849eb3 100644 --- a/Cython.spec +++ b/Cython.spec @@ -4,27 +4,15 @@ %bcond_without tests Name: Cython -Version: 0.29.19 +Version: 0.29.21 %global upver %{version_no_tilde %{nil}} -Release: 2%{?dist} +Release: 1%{?dist} Summary: Language for writing Python extension modules License: ASL 2.0 URL: http://www.cython.org Source: https://github.com/cython/cython/archive/%{upver}/%{srcname}-%{version}.tar.gz -# Backported from upstream, fixes an undefined behavior and allows clang interoperability -Patch2705: f639e6d435cb240c5c21afe91a71915c4af23b7c.patch - -# Partially work around issues with class and static methods -# See https://bugzilla.redhat.com/show_bug.cgi?id=1788506 -# Mostly backported from upstream: https://github.com/cython/cython/pull/3106 -# This also: -# - Removes staticmethod optimizations for normal functions -# - Removes failing test for staticmethod fused functions, which still fail -# See also: https://github.com/cython/cython/issues/3614 -Patch3106: class-static-method-workaround.patch - BuildRequires: gcc %if %{with tests} BuildRequires: gcc-c++ @@ -121,6 +109,9 @@ cp -p cython-mode-init.el cython-mode-init.elc %{buildroot}%{_emacs_sitestartdir %{_emacs_sitestartdir}/cython*.el* %changelog +* Fri Dec 4 2020 sguelton@redhat.com - 0.29.21-1 +- Update to 0.29.21 + * Wed May 27 2020 sguelton@redhat.com - 0.29.19-2 - Backport f639e6d435cb240c, see [RHELPLAN-41401] diff --git a/class-static-method-workaround.patch b/class-static-method-workaround.patch deleted file mode 100644 index 4f854e0..0000000 --- a/class-static-method-workaround.patch +++ /dev/null @@ -1,139 +0,0 @@ -diff -U3 -r cython-0.29.17.orig/Cython/Compiler/ExprNodes.py cython-0.29.17/Cython/Compiler/ExprNodes.py ---- cython-0.29.17.orig/Cython/Compiler/ExprNodes.py 2020-04-26 13:48:48.000000000 +0200 -+++ cython-0.29.17/Cython/Compiler/ExprNodes.py 2020-05-15 17:44:55.157172257 +0200 -@@ -2295,8 +2295,10 @@ - setter = 'PyDict_SetItem' - namespace = Naming.moddict_cname - elif entry.is_pyclass_attr: -- code.globalstate.use_utility_code(UtilityCode.load_cached("SetNameInClass", "ObjectHandling.c")) -- setter = '__Pyx_SetNameInClass' -+ # Special-case setting __new__ -+ n = "SetNewInClass" if self.name == "__new__" else "SetNameInClass" -+ code.globalstate.use_utility_code(UtilityCode.load_cached(n, "ObjectHandling.c")) -+ setter = '__Pyx_' + n - else: - assert False, repr(entry) - code.put_error_if_neg( -diff -U3 -r cython-0.29.17.orig/Cython/Compiler/Nodes.py cython-0.29.17/Cython/Compiler/Nodes.py ---- cython-0.29.17.orig/Cython/Compiler/Nodes.py 2020-04-26 13:48:48.000000000 +0200 -+++ cython-0.29.17/Cython/Compiler/Nodes.py 2020-05-15 17:44:55.159172253 +0200 -@@ -2872,7 +2872,6 @@ - func = decorator.decorator - if func.is_name: - self.is_classmethod |= func.name == 'classmethod' -- self.is_staticmethod |= func.name == 'staticmethod' - - if self.is_classmethod and env.lookup_here('classmethod'): - # classmethod() was overridden - not much we can do here ... -diff -U3 -r cython-0.29.17.orig/Cython/Utility/CythonFunction.c cython-0.29.17/Cython/Utility/CythonFunction.c ---- cython-0.29.17.orig/Cython/Utility/CythonFunction.c 2020-04-26 13:48:48.000000000 +0200 -+++ cython-0.29.17/Cython/Utility/CythonFunction.c 2020-05-15 17:44:55.160172251 +0200 -@@ -548,21 +548,6 @@ - - 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; - return __Pyx_PyMethod_New(func, obj, type); - } - -diff -U3 -r cython-0.29.17.orig/Cython/Utility/ObjectHandling.c cython-0.29.17/Cython/Utility/ObjectHandling.c ---- cython-0.29.17.orig/Cython/Utility/ObjectHandling.c 2020-04-26 13:48:48.000000000 +0200 -+++ cython-0.29.17/Cython/Utility/ObjectHandling.c 2020-05-15 17:44:55.160172251 +0200 -@@ -1163,6 +1163,30 @@ - #define __Pyx_SetNameInClass(ns, name, value) PyObject_SetItem(ns, name, value) - #endif - -+/////////////// SetNewInClass.proto /////////////// -+ -+static int __Pyx_SetNewInClass(PyObject *ns, PyObject *name, PyObject *value); -+ -+/////////////// SetNewInClass /////////////// -+//@requires: SetNameInClass -+ -+// Special-case setting __new__: if it's a Cython function, wrap it in a -+// staticmethod. This is similar to what Python does for a Python function -+// called __new__. -+static int __Pyx_SetNewInClass(PyObject *ns, PyObject *name, PyObject *value) { -+#ifdef __Pyx_CyFunction_USED -+ int ret; -+ if (__Pyx_CyFunction_Check(value)) { -+ PyObject *staticnew = PyStaticMethod_New(value); -+ if (unlikely(!staticnew)) return -1; -+ ret = __Pyx_SetNameInClass(ns, name, staticnew); -+ Py_DECREF(staticnew); -+ return ret; -+ } -+#endif -+ return __Pyx_SetNameInClass(ns, name, value); -+} -+ - - /////////////// GetModuleGlobalName.proto /////////////// - //@requires: PyDictVersioning -Only in cython-0.29.17.orig: cython-0.29.17 -diff -U3 -r cython-0.29.17.orig/tests/run/cyfunction.pyx cython-0.29.17/tests/run/cyfunction.pyx ---- cython-0.29.17.orig/tests/run/cyfunction.pyx 2020-04-26 13:48:48.000000000 +0200 -+++ cython-0.29.17/tests/run/cyfunction.pyx 2020-05-15 17:44:55.160172251 +0200 -@@ -376,6 +376,18 @@ - 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() -diff -U3 -r cython-0.29.17.orig/tests/run/fused_def.pyx cython-0.29.17/tests/run/fused_def.pyx ---- cython-0.29.17.orig/tests/run/fused_def.pyx 2020-04-26 13:48:48.000000000 +0200 -+++ cython-0.29.17/tests/run/fused_def.pyx 2020-05-15 18:03:39.436752174 +0200 -@@ -268,14 +268,6 @@ - def test_fused_def_super(): - """ - >>> test_fused_def_super() -- long 10 -- long 11 -- long 11 -- long 12 -- short 12 -- long 13 -- short 13 -- long 14 - long 14 - long 15 - long 15 -@@ -296,11 +288,6 @@ - obj = SubClass() - cls = SubClass - -- obj.mystaticmethod(obj, 10) -- cls.mystaticmethod(obj, 11) -- obj.mystaticmethod[cy.short](obj, 12) -- cls.mystaticmethod[cy.short](obj, 13) -- - obj.myclassmethod(14) - cls.myclassmethod(15) - obj.myclassmethod[cy.short](16) diff --git a/f639e6d435cb240c5c21afe91a71915c4af23b7c.patch b/f639e6d435cb240c5c21afe91a71915c4af23b7c.patch deleted file mode 100644 index e0568b6..0000000 --- a/f639e6d435cb240c5c21afe91a71915c4af23b7c.patch +++ /dev/null @@ -1,60 +0,0 @@ -From f639e6d435cb240c5c21afe91a71915c4af23b7c Mon Sep 17 00:00:00 2001 -From: serge-sans-paille -Date: Tue, 26 May 2020 18:27:22 +0200 -Subject: [PATCH] Fix overflow handling for abs() calls on signed integer types - (GH-3634) - -Fixes #1911 ---- - Cython/Compiler/ExprNodes.py | 19 ++++++++++++------- - tests/run/builtin_abs.pyx | 1 + - 2 files changed, 13 insertions(+), 7 deletions(-) - -diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py -index 48c7f721c7..25e84fd915 100644 ---- a/Cython/Compiler/ExprNodes.py -+++ b/Cython/Compiler/ExprNodes.py -@@ -5934,6 +5934,17 @@ def generate_evaluation_code(self, code): - if function.is_name or function.is_attribute: - code.globalstate.use_entry_utility_code(function.entry) - -+ abs_function_cnames = ('abs', 'labs', '__Pyx_abs_longlong') -+ is_signed_int = self.type.is_int and self.type.signed -+ if self.overflowcheck and is_signed_int and function.result() in abs_function_cnames: -+ code.globalstate.use_utility_code(UtilityCode.load_cached("Common", "Overflow.c")) -+ code.putln('if (unlikely(%s == __PYX_MIN(%s))) {\ -+ PyErr_SetString(PyExc_OverflowError,\ -+ "Trying to take the absolute value of the most negative integer is not defined."); %s; }' % ( -+ self.args[0].result(), -+ self.args[0].type.empty_declaration_code(), -+ code.error_goto(self.pos))) -+ - if not function.type.is_pyobject or len(self.arg_tuple.args) > 1 or ( - self.arg_tuple.args and self.arg_tuple.is_literal): - super(SimpleCallNode, self).generate_evaluation_code(code) -@@ -6036,13 +6047,7 @@ def generate_result_code(self, code): - self.result() if self.type.is_pyobject else None, - func_type.exception_value, self.nogil) - else: -- if (self.overflowcheck -- and self.type.is_int -- and self.type.signed -- and self.function.result() in ('abs', 'labs', '__Pyx_abs_longlong')): -- goto_error = 'if (unlikely(%s < 0)) { PyErr_SetString(PyExc_OverflowError, "value too large"); %s; }' % ( -- self.result(), code.error_goto(self.pos)) -- elif exc_checks: -+ if exc_checks: - goto_error = code.error_goto_if(" && ".join(exc_checks), self.pos) - else: - goto_error = "" -diff --git a/tests/run/builtin_abs.pyx b/tests/run/builtin_abs.pyx -index 21bea7df20..5b35eb886a 100644 ---- a/tests/run/builtin_abs.pyx -+++ b/tests/run/builtin_abs.pyx -@@ -1,5 +1,6 @@ - # mode: run - # ticket: 698 -+# distutils: extra_compile_args=-fwrapv - - cdef extern from *: - int INT_MAX diff --git a/sources b/sources index 4ae2411..1155232 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (Cython-0.29.19.tar.gz) = 402f95f82099db0ae99ca2f849a9aef97558c9c6be62d3b3c66c346ecc94efbbe824ffc77f3cc6dd1d7054a2fb0332b10fe855ca1b054095f2df2ee297fd96a7 +SHA512 (Cython-0.29.21.tar.gz) = 2c0c3e3fff07106eb98862f71cd5dec9ff29460cf9b9e4de74537ca5e033f7523989beb5fbdc14723beaf94a535976f75c803e791b87e017961d9694b8c37679