From: Victor Stinner <victor.stinner@gmail.com> Date: Thu, 1 Dec 2016 13:45:31 +0000 (+0100) Subject: WITH_CLEANUP_START uses fastcall X-Git-Tag: v3.7.0a1~1860 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=842cfff3215aaebf788d782e40a61fe421fb2a5d;p=python WITH_CLEANUP_START uses fastcall Modify WITH_CLEANUP_START bytecode: replace PyObject_CallFunctionObjArgs() with _PyObject_FastCall(). --- diff --git a/Python/ceval.c b/Python/ceval.c index d4a90c4fc9..b615bd9455 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -3135,8 +3135,12 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) gotos should still be resumed.) */ + PyObject* stack[3]; PyObject *exit_func; - PyObject *exc = TOP(), *val = Py_None, *tb = Py_None, *res; + PyObject *exc, *val, *tb, *res; + + val = tb = Py_None; + exc = TOP(); if (exc == Py_None) { (void)POP(); exit_func = TOP(); @@ -3180,8 +3184,11 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) assert(block->b_type == EXCEPT_HANDLER); block->b_level--; } - /* XXX Not the fastest way to call it... */ - res = PyObject_CallFunctionObjArgs(exit_func, exc, val, tb, NULL); + + stack[0] = exc; + stack[1] = val; + stack[2] = tb; + res = _PyObject_FastCall(exit_func, stack, 3); Py_DECREF(exit_func); if (res == NULL) goto error;