diff options
author | Mark Shannon <mark@hotpy.org> | 2022-02-03 18:36:28 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-03 18:36:28 (GMT) |
commit | da4d4ec1851714bb56a5e8d0c1cd5bf9842b4cee (patch) | |
tree | 0a59b7362a584322ba0042f411b28555353b4a67 /Python/ceval.c | |
parent | 2d080347d74078a55c47715d232d1ab8dc8cd603 (diff) | |
download | cpython-da4d4ec1851714bb56a5e8d0c1cd5bf9842b4cee.zip cpython-da4d4ec1851714bb56a5e8d0c1cd5bf9842b4cee.tar.gz cpython-da4d4ec1851714bb56a5e8d0c1cd5bf9842b4cee.tar.bz2 |
Pass reference to func, as well as args, when pushing frame. (GH-31100)
Diffstat (limited to 'Python/ceval.c')
-rw-r--r-- | Python/ceval.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index 3c52c58..3197fe8 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -2243,6 +2243,7 @@ handle_eval_breaker: goto error; } CALL_STAT_INC(frames_pushed); + Py_INCREF(getitem); _PyFrame_InitializeSpecials(new_frame, getitem, NULL, code->co_nlocalsplus); STACK_SHRINK(2); @@ -4590,7 +4591,6 @@ handle_eval_breaker: STACK_SHRINK(call_shape.postcall_shrink); // The frame has stolen all the arguments from the stack, // so there is no need to clean them up. - Py_DECREF(function); if (new_frame == NULL) { goto error; } @@ -4675,7 +4675,6 @@ handle_eval_breaker: new_frame->localsplus[i] = NULL; } STACK_SHRINK(call_shape.postcall_shrink); - Py_DECREF(func); _PyFrame_SetStackPointer(frame, stack_pointer); new_frame->previous = frame; frame = cframe.current_frame = new_frame; @@ -4712,7 +4711,6 @@ handle_eval_breaker: new_frame->localsplus[i] = NULL; } STACK_SHRINK(call_shape.postcall_shrink); - Py_DECREF(func); _PyFrame_SetStackPointer(frame, stack_pointer); new_frame->previous = frame; frame = cframe.current_frame = new_frame; @@ -6077,7 +6075,7 @@ fail_post_args: return -1; } -/* Consumes all the references to the args */ +/* Consumes references to func and all the args */ static InterpreterFrame * _PyEvalFramePushAndInit(PyThreadState *tstate, PyFunctionObject *func, PyObject *locals, PyObject* const* args, @@ -6131,7 +6129,9 @@ _PyEval_Vector(PyThreadState *tstate, PyFunctionObject *func, PyObject* const* args, size_t argcount, PyObject *kwnames) { - /* _PyEvalFramePushAndInit consumes all the references to its arguments */ + /* _PyEvalFramePushAndInit consumes the references + * to func and all its arguments */ + Py_INCREF(func); for (size_t i = 0; i < argcount; i++) { Py_INCREF(args[i]); } |