diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2016-12-01 14:45:31 +0100 |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2016-12-01 14:45:31 +0100 |
commit | 842cfff3215aaebf788d782e40a61fe421fb2a5d (patch) | |
tree | f30571a817f4baa756de8c5d61b9fc45b42499c9 /Python | |
parent | 27580c1fb5e8cb756304f523006d832d2e3532e7 (diff) | |
download | cpython-git-842cfff3215aaebf788d782e40a61fe421fb2a5d.tar.gz |
WITH_CLEANUP_START uses fastcall
Modify WITH_CLEANUP_START bytecode: replace PyObject_CallFunctionObjArgs() with
_PyObject_FastCall().
Diffstat (limited to 'Python')
-rw-r--r-- | Python/ceval.c | 13 |
1 files changed, 10 insertions, 3 deletions
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; |