diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2016-12-01 13:45:31 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2016-12-01 13:45:31 (GMT) |
commit | 842cfff3215aaebf788d782e40a61fe421fb2a5d (patch) | |
tree | f30571a817f4baa756de8c5d61b9fc45b42499c9 /Python | |
parent | 27580c1fb5e8cb756304f523006d832d2e3532e7 (diff) | |
download | cpython-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.c | 13 |
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; |