From: Victor Stinner Date: Mon, 28 Nov 2016 17:32:31 +0000 (+0100) Subject: call_function(): document PyMethod optimization X-Git-Tag: v3.7.0a1~1869 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b69ee8c38642a4efd0b880f0c8651010aa7883b9;p=python call_function(): document PyMethod optimization --- diff --git a/Python/ceval.c b/Python/ceval.c index 569c609979..42c0c614b1 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -4736,7 +4736,11 @@ call_function(PyObject ***pp_stack, Py_ssize_t oparg, PyObject *kwnames) } else { if (PyMethod_Check(func) && PyMethod_GET_SELF(func) != NULL) { - /* optimize access to bound methods */ + /* Optimize access to bound methods. Reuse the Python stack + to pass 'self' as the first argument, replace 'func' + with 'self'. It avoids the creation of a new temporary tuple + for arguments (to replace func with self) when the method uses + FASTCALL. */ PyObject *self = PyMethod_GET_SELF(func); Py_INCREF(self); func = PyMethod_GET_FUNCTION(func);