summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-03-21 01:24:00 (GMT)
committerGitHub <noreply@github.com>2022-03-21 01:24:00 (GMT)
commit9087243e2c167e38570e819b228efc3492c38c9c (patch)
treed59acfac968561a9518027489f8478dfccdf0607
parent332b04bac35cd7305c60da2d5733940dc089949a (diff)
downloadcpython-9087243e2c167e38570e819b228efc3492c38c9c.zip
cpython-9087243e2c167e38570e819b228efc3492c38c9c.tar.gz
cpython-9087243e2c167e38570e819b228efc3492c38c9c.tar.bz2
bpo-46850: Remove _PyEval_GetCoroutineOriginTrackingDepth() (GH-32018)
Remove the private undocumented function _PyEval_GetCoroutineOriginTrackingDepth() from the C API. Call the public sys.get_coroutine_origin_tracking_depth() function instead. Change the internal function _PyEval_SetCoroutineOriginTrackingDepth(): * Remove the 'tstate' parameter; * Add return value and raises an exception if depth is negative; * No longer export the function: call the public sys.set_coroutine_origin_tracking_depth() function instead. Uniformize also function declarations in pycore_ceval.h.
-rw-r--r--Include/cpython/ceval.h1
-rw-r--r--Include/internal/pycore_ceval.h18
-rw-r--r--Misc/NEWS.d/next/C API/2022-03-21-01-30-14.bpo-46850.Tfxde5.rst4
-rw-r--r--Python/ceval.c14
-rw-r--r--Python/sysmodule.c5
5 files changed, 25 insertions, 17 deletions
diff --git a/Include/cpython/ceval.h b/Include/cpython/ceval.h
index 47c86f9..e0a6887 100644
--- a/Include/cpython/ceval.h
+++ b/Include/cpython/ceval.h
@@ -8,7 +8,6 @@ PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *);
PyAPI_DATA(int) _PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyObject *arg);
PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
PyAPI_FUNC(int) _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg);
-PyAPI_FUNC(int) _PyEval_GetCoroutineOriginTrackingDepth(void);
/* Helper to look up a builtin object */
PyAPI_FUNC(PyObject *) _PyEval_GetBuiltin(PyObject *);
diff --git a/Include/internal/pycore_ceval.h b/Include/internal/pycore_ceval.h
index 3efd13d..59a3453 100644
--- a/Include/internal/pycore_ceval.h
+++ b/Include/internal/pycore_ceval.h
@@ -33,9 +33,6 @@ PyAPI_FUNC(void) _PyEval_SignalAsyncExc(PyInterpreterState *interp);
#ifdef HAVE_FORK
extern PyStatus _PyEval_ReInitThreads(PyThreadState *tstate);
#endif
-PyAPI_FUNC(void) _PyEval_SetCoroutineOriginTrackingDepth(
- PyThreadState *tstate,
- int new_depth);
// Used by sys.get_asyncgen_hooks()
extern PyObject* _PyEval_GetAsyncGenFirstiter(void);
@@ -45,11 +42,16 @@ extern PyObject* _PyEval_GetAsyncGenFinalizer(void);
extern int _PyEval_SetAsyncGenFirstiter(PyObject *);
extern int _PyEval_SetAsyncGenFinalizer(PyObject *);
-void _PyEval_Fini(void);
+// Used by sys.get_coroutine_origin_tracking_depth()
+// and sys.set_coroutine_origin_tracking_depth()
+extern int _PyEval_GetCoroutineOriginTrackingDepth(void);
+extern int _PyEval_SetCoroutineOriginTrackingDepth(int depth);
+
+extern void _PyEval_Fini(void);
extern PyObject* _PyEval_GetBuiltins(PyThreadState *tstate);
-extern PyObject *_PyEval_BuiltinsFromGlobals(
+extern PyObject* _PyEval_BuiltinsFromGlobals(
PyThreadState *tstate,
PyObject *globals);
@@ -63,7 +65,7 @@ _PyEval_EvalFrame(PyThreadState *tstate, struct _PyInterpreterFrame *frame, int
return tstate->interp->eval_frame(tstate, frame, throwflag);
}
-extern PyObject *
+extern PyObject*
_PyEval_Vector(PyThreadState *tstate,
PyFunctionObject *func, PyObject *locals,
PyObject* const* args, size_t argcount,
@@ -124,9 +126,9 @@ static inline void _Py_LeaveRecursiveCall_inline(void) {
#define Py_LeaveRecursiveCall() _Py_LeaveRecursiveCall_inline()
-struct _PyInterpreterFrame *_PyEval_GetFrame(void);
+extern struct _PyInterpreterFrame* _PyEval_GetFrame(void);
-PyObject *_Py_MakeCoro(PyFunctionObject *func);
+extern PyObject* _Py_MakeCoro(PyFunctionObject *func);
#ifdef __cplusplus
}
diff --git a/Misc/NEWS.d/next/C API/2022-03-21-01-30-14.bpo-46850.Tfxde5.rst b/Misc/NEWS.d/next/C API/2022-03-21-01-30-14.bpo-46850.Tfxde5.rst
new file mode 100644
index 0000000..0dc01fe
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2022-03-21-01-30-14.bpo-46850.Tfxde5.rst
@@ -0,0 +1,4 @@
+Remove the private undocumented function
+``_PyEval_GetCoroutineOriginTrackingDepth()`` from the C API. Call the
+public :func:`sys.get_coroutine_origin_tracking_depth` function instead.
+Patch by Victor Stinner.
diff --git a/Python/ceval.c b/Python/ceval.c
index 1a120bb..04f2dde 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -6852,13 +6852,19 @@ PyEval_SetTrace(Py_tracefunc func, PyObject *arg)
}
-void
-_PyEval_SetCoroutineOriginTrackingDepth(PyThreadState *tstate, int new_depth)
+int
+_PyEval_SetCoroutineOriginTrackingDepth(int depth)
{
- assert(new_depth >= 0);
- tstate->coroutine_origin_tracking_depth = new_depth;
+ PyThreadState *tstate = _PyThreadState_GET();
+ if (depth < 0) {
+ _PyErr_SetString(tstate, PyExc_ValueError, "depth must be >= 0");
+ return -1;
+ }
+ tstate->coroutine_origin_tracking_depth = depth;
+ return 0;
}
+
int
_PyEval_GetCoroutineOriginTrackingDepth(void)
{
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index ae6d7c2..c89f81f 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -1186,12 +1186,9 @@ static PyObject *
sys_set_coroutine_origin_tracking_depth_impl(PyObject *module, int depth)
/*[clinic end generated code: output=0a2123c1cc6759c5 input=a1d0a05f89d2c426]*/
{
- PyThreadState *tstate = _PyThreadState_GET();
- if (depth < 0) {
- _PyErr_SetString(tstate, PyExc_ValueError, "depth must be >= 0");
+ if (_PyEval_SetCoroutineOriginTrackingDepth(depth) < 0) {
return NULL;
}
- _PyEval_SetCoroutineOriginTrackingDepth(tstate, depth);
Py_RETURN_NONE;
}