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:
Jeremy Hylton 2000-08-31 19:23:01 +00:00
parent c88b99ce06
commit ee5adfbae6
4 changed files with 84 additions and 15 deletions

View file

@ -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");