diff options
author | Marek Szuba <marecki@gentoo.org> | 2021-05-15 01:11:37 +0200 |
---|---|---|
committer | Marek Szuba <marecki@gentoo.org> | 2021-05-15 02:36:31 +0200 |
commit | 56e03cffa7bcb4b7b3043360e28e89cf308714e5 (patch) | |
tree | e2c1e74d03f8ae01512c36878280db1a384c3c0d /dev-python/cython | |
parent | dev-python/pytools: support python3_10 (diff) | |
download | gentoo-56e03cffa7bcb4b7b3043360e28e89cf308714e5.tar.gz gentoo-56e03cffa7bcb4b7b3043360e28e89cf308714e5.tar.bz2 gentoo-56e03cffa7bcb4b7b3043360e28e89cf308714e5.zip |
dev-python/cython: backport tracing fix for python3_10 compatibility
Spotted it now that I am able to run the cython test suite.
There is another error, in test_exceptions.pyx, stemming from the fact
IndentationError messages in 3.10 are more verbose (e.g.
expected an indented block after 'if' statement on line 1
instead of simply
expected an indented block) - that one however seems to be a test-only
issue.
Signed-off-by: Marek Szuba <marecki@gentoo.org>
Diffstat (limited to 'dev-python/cython')
-rw-r--r-- | dev-python/cython/cython-0.29.23.ebuild | 1 | ||||
-rw-r--r-- | dev-python/cython/files/cython-0.29.23-tracing-py310.patch | 213 |
2 files changed, 214 insertions, 0 deletions
diff --git a/dev-python/cython/cython-0.29.23.ebuild b/dev-python/cython/cython-0.29.23.ebuild index eb35100a371d..d091b7190eb7 100644 --- a/dev-python/cython/cython-0.29.23.ebuild +++ b/dev-python/cython/cython-0.29.23.ebuild @@ -32,6 +32,7 @@ BDEPEND="${RDEPEND} PATCHES=( "${FILESDIR}/${PN}-0.29.14-sphinx-update.patch" "${FILESDIR}/${PN}-0.29.22-spawn-multiprocessing.patch" + "${FILESDIR}/${PN}-0.29.23-tracing-py310.patch" ) SITEFILE=50cython-gentoo.el diff --git a/dev-python/cython/files/cython-0.29.23-tracing-py310.patch b/dev-python/cython/files/cython-0.29.23-tracing-py310.patch new file mode 100644 index 000000000000..ff0e45a646dc --- /dev/null +++ b/dev-python/cython/files/cython-0.29.23-tracing-py310.patch @@ -0,0 +1,213 @@ +From c9cccfeaf3f0e20c2bb14fc234e86f4fc8e4fe81 Mon Sep 17 00:00:00 2001 +From: Stefan Behnel <stefan_ml@behnel.de> +Date: Fri, 14 May 2021 19:39:58 +0200 +Subject: [PATCH] Adapt tracing code to Py3.10 beta 1. + +--- + Cython/Utility/Profile.c | 79 +++++++++++++++++++++++++--------------- + 1 file changed, 49 insertions(+), 30 deletions(-) + +diff --git a/Cython/Utility/Profile.c b/Cython/Utility/Profile.c +index 15ceb41cc2..2cd9af9da7 100644 +--- a/Cython/Utility/Profile.c ++++ b/Cython/Utility/Profile.c +@@ -47,13 +47,32 @@ + #define CYTHON_FRAME_DEL(frame) Py_CLEAR(frame) + #endif + +- #define __Pyx_TraceDeclarations \ +- static PyCodeObject *$frame_code_cname = NULL; \ +- CYTHON_FRAME_MODIFIER PyFrameObject *$frame_cname = NULL; \ +- int __Pyx_use_tracing = 0; ++ #define __Pyx_TraceDeclarations \ ++ static PyCodeObject *$frame_code_cname = NULL; \ ++ CYTHON_FRAME_MODIFIER PyFrameObject *$frame_cname = NULL; \ ++ int __Pyx_use_tracing = 0; + +- #define __Pyx_TraceFrameInit(codeobj) \ +- if (codeobj) $frame_code_cname = (PyCodeObject*) codeobj; ++ #define __Pyx_TraceFrameInit(codeobj) \ ++ if (codeobj) $frame_code_cname = (PyCodeObject*) codeobj; ++ ++#if PY_VERSION_HEX >= 0x030a00b1 ++ #define __Pyx_IsTracing(tstate, check_tracing, check_funcs) \ ++ (unlikely(tstate->cframe->use_tracing) && \ ++ (!(check_tracing) || !tstate->tracing) && \ ++ (!(check_funcs) || tstate->c_profilefunc || (CYTHON_TRACE && tstate->c_tracefunc))) ++ ++ #define __Pyx_SetTracing(tstate, enable) \ ++ (tstate)->cframe->use_tracing = (enable) ++ ++#else ++ #define __Pyx_IsTracing(tstate, check_tracing, check_funcs) \ ++ (unlikely(tstate->use_tracing) && \ ++ (!(check_tracing) || !tstate->tracing) && \ ++ (!(check_funcs) || tstate->c_profilefunc || (CYTHON_TRACE && tstate->c_tracefunc))) ++ ++ #define __Pyx_SetTracing(tstate, enable) \ ++ (tstate)->use_tracing = (enable) ++#endif + + #ifdef WITH_THREAD + #define __Pyx_TraceCall(funcname, srcfile, firstlineno, nogil, goto_error) \ +@@ -62,8 +81,7 @@ + PyThreadState *tstate; \ + PyGILState_STATE state = PyGILState_Ensure(); \ + tstate = __Pyx_PyThreadState_Current; \ +- if (unlikely(tstate->use_tracing) && !tstate->tracing && \ +- (tstate->c_profilefunc || (CYTHON_TRACE && tstate->c_tracefunc))) { \ ++ if (__Pyx_IsTracing(tstate, 1, 1)) { \ + __Pyx_use_tracing = __Pyx_TraceSetupAndCall(&$frame_code_cname, &$frame_cname, tstate, funcname, srcfile, firstlineno); \ + } \ + PyGILState_Release(state); \ +@@ -71,8 +89,7 @@ + } \ + } else { \ + PyThreadState* tstate = PyThreadState_GET(); \ +- if (unlikely(tstate->use_tracing) && !tstate->tracing && \ +- (tstate->c_profilefunc || (CYTHON_TRACE && tstate->c_tracefunc))) { \ ++ if (__Pyx_IsTracing(tstate, 1, 1)) { \ + __Pyx_use_tracing = __Pyx_TraceSetupAndCall(&$frame_code_cname, &$frame_cname, tstate, funcname, srcfile, firstlineno); \ + if (unlikely(__Pyx_use_tracing < 0)) goto_error; \ + } \ +@@ -80,8 +97,7 @@ + #else + #define __Pyx_TraceCall(funcname, srcfile, firstlineno, nogil, goto_error) \ + { PyThreadState* tstate = PyThreadState_GET(); \ +- if (unlikely(tstate->use_tracing) && !tstate->tracing && \ +- (tstate->c_profilefunc || (CYTHON_TRACE && tstate->c_tracefunc))) { \ ++ if (__Pyx_IsTracing(tstate, 1, 1)) { \ + __Pyx_use_tracing = __Pyx_TraceSetupAndCall(&$frame_code_cname, &$frame_cname, tstate, funcname, srcfile, firstlineno); \ + if (unlikely(__Pyx_use_tracing < 0)) goto_error; \ + } \ +@@ -91,10 +107,9 @@ + #define __Pyx_TraceException() \ + if (likely(!__Pyx_use_tracing)); else { \ + PyThreadState* tstate = __Pyx_PyThreadState_Current; \ +- if (tstate->use_tracing && \ +- (tstate->c_profilefunc || (CYTHON_TRACE && tstate->c_tracefunc))) { \ ++ if (__Pyx_IsTracing(tstate, 0, 1)) { \ + tstate->tracing++; \ +- tstate->use_tracing = 0; \ ++ __Pyx_SetTracing(tstate, 0); \ + PyObject *exc_info = __Pyx_GetExceptionTuple(tstate); \ + if (exc_info) { \ + if (CYTHON_TRACE && tstate->c_tracefunc) \ +@@ -104,7 +119,7 @@ + tstate->c_profileobj, $frame_cname, PyTrace_EXCEPTION, exc_info); \ + Py_DECREF(exc_info); \ + } \ +- tstate->use_tracing = 1; \ ++ __Pyx_SetTracing(tstate, 1); \ + tstate->tracing--; \ + } \ + } +@@ -113,13 +128,13 @@ + PyObject *type, *value, *traceback; + __Pyx_ErrFetchInState(tstate, &type, &value, &traceback); + tstate->tracing++; +- tstate->use_tracing = 0; ++ __Pyx_SetTracing(tstate, 0); + if (CYTHON_TRACE && tstate->c_tracefunc) + tstate->c_tracefunc(tstate->c_traceobj, frame, PyTrace_RETURN, result); + if (tstate->c_profilefunc) + tstate->c_profilefunc(tstate->c_profileobj, frame, PyTrace_RETURN, result); + CYTHON_FRAME_DEL(frame); +- tstate->use_tracing = 1; ++ __Pyx_SetTracing(tstate, 1); + tstate->tracing--; + __Pyx_ErrRestoreInState(tstate, type, value, traceback); + } +@@ -132,14 +147,14 @@ + PyThreadState *tstate; \ + PyGILState_STATE state = PyGILState_Ensure(); \ + tstate = __Pyx_PyThreadState_Current; \ +- if (tstate->use_tracing) { \ ++ if (__Pyx_IsTracing(tstate, 0, 0)) { \ + __Pyx_call_return_trace_func(tstate, $frame_cname, (PyObject*)result); \ + } \ + PyGILState_Release(state); \ + } \ + } else { \ + PyThreadState* tstate = __Pyx_PyThreadState_Current; \ +- if (tstate->use_tracing) { \ ++ if (__Pyx_IsTracing(tstate, 0, 0)) { \ + __Pyx_call_return_trace_func(tstate, $frame_cname, (PyObject*)result); \ + } \ + } \ +@@ -148,7 +163,7 @@ + #define __Pyx_TraceReturn(result, nogil) \ + if (likely(!__Pyx_use_tracing)); else { \ + PyThreadState* tstate = __Pyx_PyThreadState_Current; \ +- if (tstate->use_tracing) { \ ++ if (__Pyx_IsTracing(tstate, 0, 0)) { \ + __Pyx_call_return_trace_func(tstate, $frame_cname, (PyObject*)result); \ + } \ + } +@@ -176,9 +191,11 @@ + __Pyx_ErrFetchInState(tstate, &type, &value, &traceback); + __Pyx_PyFrame_SetLineNumber(frame, lineno); + tstate->tracing++; +- tstate->use_tracing = 0; ++ __Pyx_SetTracing(tstate, 0); ++ + ret = tstate->c_tracefunc(tstate->c_traceobj, frame, PyTrace_LINE, NULL); +- tstate->use_tracing = 1; ++ ++ __Pyx_SetTracing(tstate, 1); + tstate->tracing--; + if (likely(!ret)) { + __Pyx_ErrRestoreInState(tstate, type, value, traceback); +@@ -199,7 +216,7 @@ + PyThreadState *tstate; \ + PyGILState_STATE state = __Pyx_PyGILState_Ensure(); \ + tstate = __Pyx_PyThreadState_Current; \ +- if (unlikely(tstate->use_tracing && tstate->c_tracefunc && $frame_cname->f_trace)) { \ ++ if (__Pyx_IsTracing(tstate, 0, 0) && tstate->c_tracefunc && $frame_cname->f_trace) { \ + ret = __Pyx_call_line_trace_func(tstate, $frame_cname, lineno); \ + } \ + __Pyx_PyGILState_Release(state); \ +@@ -207,7 +224,7 @@ + } \ + } else { \ + PyThreadState* tstate = __Pyx_PyThreadState_Current; \ +- if (unlikely(tstate->use_tracing && tstate->c_tracefunc && $frame_cname->f_trace)) { \ ++ if (__Pyx_IsTracing(tstate, 0, 0) && tstate->c_tracefunc && $frame_cname->f_trace) { \ + int ret = __Pyx_call_line_trace_func(tstate, $frame_cname, lineno); \ + if (unlikely(ret)) goto_error; \ + } \ +@@ -217,7 +234,7 @@ + #define __Pyx_TraceLine(lineno, nogil, goto_error) \ + if (likely(!__Pyx_use_tracing)); else { \ + PyThreadState* tstate = __Pyx_PyThreadState_Current; \ +- if (unlikely(tstate->use_tracing && tstate->c_tracefunc && $frame_cname->f_trace)) { \ ++ if (__Pyx_IsTracing(tstate, 0, 0) && tstate->c_tracefunc && $frame_cname->f_trace) { \ + int ret = __Pyx_call_line_trace_func(tstate, $frame_cname, lineno); \ + if (unlikely(ret)) goto_error; \ + } \ +@@ -263,19 +280,21 @@ static int __Pyx_TraceSetupAndCall(PyCodeObject** code, + (*frame)->f_tstate = tstate; + #endif + } +- __Pyx_PyFrame_SetLineNumber(*frame, firstlineno); ++ __Pyx_PyFrame_SetLineNumber(*frame, firstlineno); ++ + retval = 1; + tstate->tracing++; +- tstate->use_tracing = 0; ++ __Pyx_SetTracing(tstate, 0); + __Pyx_ErrFetchInState(tstate, &type, &value, &traceback); ++ + #if CYTHON_TRACE + if (tstate->c_tracefunc) + retval = tstate->c_tracefunc(tstate->c_traceobj, *frame, PyTrace_CALL, NULL) == 0; + if (retval && tstate->c_profilefunc) + #endif + retval = tstate->c_profilefunc(tstate->c_profileobj, *frame, PyTrace_CALL, NULL) == 0; +- tstate->use_tracing = (tstate->c_profilefunc || +- (CYTHON_TRACE && tstate->c_tracefunc)); ++ ++ __Pyx_SetTracing(tstate, (tstate->c_profilefunc || (CYTHON_TRACE && tstate->c_tracefunc))); + tstate->tracing--; + if (retval) { + __Pyx_ErrRestoreInState(tstate, type, value, traceback); |