mirror of
https://github.com/python/cpython.git
synced 2025-09-08 18:01:44 +00:00
add user-modifiable recursion_limit
ceval.c: define recurion_limit (static), default value is 2500 define Py_GetRecursionLimit and Py_SetRecursionLimit raise RuntimeError if limit is exceeded PC/config.h: remove plat-specific definition sysmodule.c: add sys.(get|set)recursionlimit
This commit is contained in:
parent
c88b99ce06
commit
ee5adfbae6
4 changed files with 84 additions and 15 deletions
|
@ -298,6 +298,20 @@ Py_MakePendingCalls(void)
|
|||
}
|
||||
|
||||
|
||||
/* The interpreter's recursion limit */
|
||||
|
||||
static int recursion_limit = 2500;
|
||||
|
||||
int Py_GetRecursionLimit(void)
|
||||
{
|
||||
return recursion_limit;
|
||||
}
|
||||
|
||||
void Py_SetRecursionLimit(int new_limit)
|
||||
{
|
||||
recursion_limit = new_limit;
|
||||
}
|
||||
|
||||
/* Status code for main loop (reason for stack unwind) */
|
||||
|
||||
enum why_code {
|
||||
|
@ -326,10 +340,6 @@ PyEval_EvalCode(PyCodeObject *co, PyObject *globals, PyObject *locals)
|
|||
|
||||
/* Interpreter main loop */
|
||||
|
||||
#ifndef MAX_RECURSION_DEPTH
|
||||
#define MAX_RECURSION_DEPTH 10000
|
||||
#endif
|
||||
|
||||
static PyObject *
|
||||
eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
|
||||
PyObject **args, int argcount, PyObject **kws, int kwcount,
|
||||
|
@ -565,7 +575,7 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
|
|||
}
|
||||
}
|
||||
|
||||
if (++tstate->recursion_depth > MAX_RECURSION_DEPTH) {
|
||||
if (++tstate->recursion_depth > recursion_limit) {
|
||||
--tstate->recursion_depth;
|
||||
PyErr_SetString(PyExc_RuntimeError,
|
||||
"Maximum recursion depth exceeded");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue