Skip to content

bpo-39947: Move get_recursion_depth() to _testinternalcapi #18974

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 13, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Lib/test/test_exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -994,7 +994,7 @@ def test_recursion_normalizing_exception(self):
# finalization of these locals.
code = """if 1:
import sys
from _testcapi import get_recursion_depth
from _testinternalcapi import get_recursion_depth

class MyException(Exception): pass

Expand Down
2 changes: 1 addition & 1 deletion Lib/test/test_sys.py
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ def test_setrecursionlimit_recursion_depth(self):
# mark". Otherwise, it may not be possible anymore to
# reset the overflowed flag to 0.

from _testcapi import get_recursion_depth
from _testinternalcapi import get_recursion_depth

def set_recursion_limit_at_depth(depth, limit):
recursion_depth = get_recursion_depth()
Expand Down
18 changes: 5 additions & 13 deletions Modules/_testcapimodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@
* standard Python regression test, via Lib/test/test_capi.py.
*/

/* The Visual Studio projects builds _testcapi with Py_BUILD_CORE_MODULE
define, but we only want to test the public C API, not the internal
C API. */
/* This module tests the public (Include/ and Include/cpython/) C API.
The internal C API must not be used here: use _testinternalcapi for that.

The Visual Studio projects builds _testcapi with Py_BUILD_CORE_MODULE
macro defined, but only the public C API must be tested here. */
#undef Py_BUILD_CORE_MODULE

#define PY_SSIZE_T_CLEAN
Expand Down Expand Up @@ -4523,15 +4525,6 @@ test_PyTime_AsMicroseconds(PyObject *self, PyObject *args)
return _PyTime_AsNanosecondsObject(ms);
}

static PyObject*
get_recursion_depth(PyObject *self, PyObject *args)
{
PyThreadState *tstate = PyThreadState_Get();

/* subtract one to ignore the frame of the get_recursion_depth() call */
return PyLong_FromLong(tstate->recursion_depth - 1);
}

static PyObject*
pymem_buffer_overflow(PyObject *self, PyObject *args)
{
Expand Down Expand Up @@ -5486,7 +5479,6 @@ static PyMethodDef TestMethods[] = {
#endif
{"PyTime_AsMilliseconds", test_PyTime_AsMilliseconds, METH_VARARGS},
{"PyTime_AsMicroseconds", test_PyTime_AsMicroseconds, METH_VARARGS},
{"get_recursion_depth", get_recursion_depth, METH_NOARGS},
{"pymem_buffer_overflow", pymem_buffer_overflow, METH_NOARGS},
{"pymem_api_misuse", pymem_api_misuse, METH_NOARGS},
{"pymem_malloc_without_gil", pymem_malloc_without_gil, METH_NOARGS},
Expand Down
13 changes: 12 additions & 1 deletion Modules/_testinternalcapi.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#define PY_SSIZE_T_CLEAN

#include "Python.h"
#include "pycore_initconfig.h"
#include "pycore_initconfig.h" // _Py_GetConfigsAsDict()


static PyObject *
Expand All @@ -19,8 +19,19 @@ get_configs(PyObject *self, PyObject *Py_UNUSED(args))
}


static PyObject*
get_recursion_depth(PyObject *self, PyObject *args)
{
PyThreadState *tstate = PyThreadState_Get();

/* subtract one to ignore the frame of the get_recursion_depth() call */
return PyLong_FromLong(tstate->recursion_depth - 1);
}


static PyMethodDef TestMethods[] = {
{"get_configs", get_configs, METH_NOARGS},
{"get_recursion_depth", get_recursion_depth, METH_NOARGS},
{NULL, NULL} /* sentinel */
};

Expand Down