summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2016-12-01 13:45:31 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2016-12-01 13:45:31 (GMT)
commit842cfff3215aaebf788d782e40a61fe421fb2a5d (patch)
treef30571a817f4baa756de8c5d61b9fc45b42499c9 /Python
parent27580c1fb5e8cb756304f523006d832d2e3532e7 (diff)
downloadcpython-842cfff3215aaebf788d782e40a61fe421fb2a5d.zip
cpython-842cfff3215aaebf788d782e40a61fe421fb2a5d.tar.gz
cpython-842cfff3215aaebf788d782e40a61fe421fb2a5d.tar.bz2
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.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index d4a90c4..b615bd9 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;