From c384f01244c37312c87867fddf06febe4a3e1c44 Mon Sep 17 00:00:00 2001 From: Robert Bradshaw <robertwb@gmail.com> Date: Sat, 22 Feb 2014 17:07:59 -0800 Subject: [PATCH] Restore some over-eager 3.1 removals. --- Cython/Compiler/ExprNodes.py | 2 +- Cython/Compiler/Main.py | 4 ++-- Cython/Utility/Buffer.c | 3 --- Cython/Utility/Builtins.c | 4 ++++ Cython/Utility/CythonFunction.c | 4 ++++ Cython/Utility/ModuleSetupCode.c | 14 ++++++++------ Cython/Utility/ObjectHandling.c | 4 ++-- Cython/Utility/StringTools.c | 7 ++++++- 8 files changed, 27 insertions(+), 15 deletions(-) diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py index 4be10d9d5..646e4b98d 100644 --- a/Cython/Compiler/ExprNodes.py +++ b/Cython/Compiler/ExprNodes.py @@ -3995,7 +3995,7 @@ class SliceIndexNode(ExprNode): TempitaUtilityCode.load_cached("SliceTupleAndList", "ObjectHandling.c")) cfunc = '__Pyx_PyTuple_GetSlice' else: - cfunc = '__Pyx_PySequence_GetSlice' + cfunc = 'PySequence_GetSlice' code.putln( "%s = %s(%s, %s, %s); %s" % ( result, diff --git a/Cython/Compiler/Main.py b/Cython/Compiler/Main.py index c53a6e5d3..9e25fd6e6 100644 --- a/Cython/Compiler/Main.py +++ b/Cython/Compiler/Main.py @@ -3,8 +3,8 @@ # import os, sys, re, codecs -if sys.version_info[:2] < (2, 6): - sys.stderr.write("Sorry, Cython requires Python 2.6 or later\n") +if sys.version_info[:2] < (2, 6) or (3, 0) <= sys.version_info[:2] < (3, 2): + sys.stderr.write("Sorry, Cython requires Python 2.6+ or 3.2+\n") sys.exit(1) import Errors diff --git a/Cython/Utility/Buffer.c b/Cython/Utility/Buffer.c index 41e20dbd3..ad8ce0daa 100644 --- a/Cython/Utility/Buffer.c +++ b/Cython/Utility/Buffer.c @@ -134,9 +134,6 @@ static void __Pyx_ReleaseBuffer(Py_buffer *view) { {{endif}} {{endfor}} - goto nofail; - -nofail: Py_DECREF(obj); view->obj = NULL; } diff --git a/Cython/Utility/Builtins.c b/Cython/Utility/Builtins.c index 0b815b61a..166240a3a 100644 --- a/Cython/Utility/Builtins.c +++ b/Cython/Utility/Builtins.c @@ -130,7 +130,11 @@ static PyObject* __Pyx_PyExec3(PyObject* o, PyObject* globals, PyObject* locals) "code object passed to exec() may not contain free variables"); goto bad; } + #if PY_VERSION_HEX < 0x030200B1 + result = PyEval_EvalCode((PyCodeObject *)o, globals, locals); + #else result = PyEval_EvalCode(o, globals, locals); + #endif } else { PyCompilerFlags cf; cf.cf_flags = 0; diff --git a/Cython/Utility/CythonFunction.c b/Cython/Utility/CythonFunction.c index 80044d318..2d6d0b5ea 100644 --- a/Cython/Utility/CythonFunction.c +++ b/Cython/Utility/CythonFunction.c @@ -1147,7 +1147,11 @@ static PyObject* __Pyx_Method_ClassMethod(PyObject *method) { } if (PyObject_TypeCheck(method, methoddescr_type)) { /* cdef classes */ PyMethodDescrObject *descr = (PyMethodDescrObject *)method; + #if PY_VERSION_HEX < 0x03020000 + PyTypeObject *d_type = descr->d_type; + #else PyTypeObject *d_type = descr->d_common.d_type; + #endif return PyDescr_NewClassMethod(d_type, descr->d_method); } #endif diff --git a/Cython/Utility/ModuleSetupCode.c b/Cython/Utility/ModuleSetupCode.c index cca3084c7..031c6aa0b 100644 --- a/Cython/Utility/ModuleSetupCode.c +++ b/Cython/Utility/ModuleSetupCode.c @@ -157,12 +157,14 @@ #define PyBoolObject PyLongObject #endif -#define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t -#define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t - -#define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) -#define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) -#define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif #if PY_MAJOR_VERSION >= 3 #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) diff --git a/Cython/Utility/ObjectHandling.c b/Cython/Utility/ObjectHandling.c index 38b78e56c..3df8e2994 100644 --- a/Cython/Utility/ObjectHandling.c +++ b/Cython/Utility/ObjectHandling.c @@ -158,7 +158,7 @@ static CYTHON_INLINE PyObject *__Pyx_PyIter_Next2(PyObject* iterator, PyObject* if (likely(next)) return next; #if CYTHON_COMPILING_IN_CPYTHON -#if PY_MAJOR_VERSION >= 3 || (PY_MAJOR_VERSION < 3 && PY_VERSION_HEX >= 0x02070000) +#if PY_VERSION_HEX >= 0x02070000 if (unlikely(iternext == &_PyObject_NextNotImplemented)) return NULL; #endif @@ -1029,7 +1029,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { /////////////// PyObjectLookupSpecial.proto /////////////// //@requires: PyObjectGetAttrStr -#if CYTHON_COMPILING_IN_CPYTHON && (PY_MAJOR_VERSION < 3 && PY_VERSION_HEX >= 0x02070000) +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x02070000 // looks like calling _PyType_Lookup() isn't safe in Py<=2.6/3.1 static CYTHON_INLINE PyObject* __Pyx_PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name) { PyObject *res; diff --git a/Cython/Utility/StringTools.c b/Cython/Utility/StringTools.c index 1504ea533..2485d2824 100644 --- a/Cython/Utility/StringTools.c +++ b/Cython/Utility/StringTools.c @@ -515,7 +515,12 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_Substring( // Py_UNICODE_ISTITLE() doesn't match unicode.istitle() as the latter // additionally allows character that comply with Py_UNICODE_ISUPPER() -static CYTHON_INLINE int __Pyx_Py_UNICODE_ISTITLE(Py_UCS4 uchar) { +#if PY_VERSION_HEX < 0x030200A2 +static CYTHON_INLINE int __Pyx_Py_UNICODE_ISTITLE(Py_UNICODE uchar) +#else +static CYTHON_INLINE int __Pyx_Py_UNICODE_ISTITLE(Py_UCS4 uchar) +#endif +{ return Py_UNICODE_ISTITLE(uchar) || Py_UNICODE_ISUPPER(uchar); } -- 2.30.9