summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Szuba <marecki@gentoo.org>2021-05-15 01:11:37 +0200
committerMarek Szuba <marecki@gentoo.org>2021-05-15 02:36:31 +0200
commit56e03cffa7bcb4b7b3043360e28e89cf308714e5 (patch)
treee2c1e74d03f8ae01512c36878280db1a384c3c0d /dev-python/cython
parentdev-python/pytools: support python3_10 (diff)
downloadgentoo-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.ebuild1
-rw-r--r--dev-python/cython/files/cython-0.29.23-tracing-py310.patch213
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);