summaryrefslogtreecommitdiff
path: root/Python/sysmodule.c
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2016-08-20 01:22:57 +0200
committerVictor Stinner <victor.stinner@gmail.com>2016-08-20 01:22:57 +0200
commitf1390f308e25c22f553ef9c720842b2c537d831a (patch)
tree45e39c68d04199d2bba30d51120d6cb62e6676f5 /Python/sysmodule.c
parent6bdc22306527e58061bad2e49ab3bb4b525a2f86 (diff)
downloadcpython-f1390f308e25c22f553ef9c720842b2c537d831a.tar.gz
call_trampoline() now uses fast call
Issue #27128.
Diffstat (limited to 'Python/sysmodule.c')
-rw-r--r--Python/sysmodule.c29
1 files changed, 10 insertions, 19 deletions
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 56175d9544..74b8560ae8 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -368,34 +368,25 @@ static PyObject *
call_trampoline(PyObject* callback,
PyFrameObject *frame, int what, PyObject *arg)
{
- PyObject *args;
- PyObject *whatstr;
PyObject *result;
+ PyObject *stack[3];
- args = PyTuple_New(3);
- if (args == NULL)
- return NULL;
- if (PyFrame_FastToLocalsWithError(frame) < 0)
+ if (PyFrame_FastToLocalsWithError(frame) < 0) {
return NULL;
+ }
- Py_INCREF(frame);
- whatstr = whatstrings[what];
- Py_INCREF(whatstr);
- if (arg == NULL)
- arg = Py_None;
- Py_INCREF(arg);
- PyTuple_SET_ITEM(args, 0, (PyObject *)frame);
- PyTuple_SET_ITEM(args, 1, whatstr);
- PyTuple_SET_ITEM(args, 2, arg);
+ stack[0] = (PyObject *)frame;
+ stack[1] = whatstrings[what];
+ stack[2] = (arg != NULL) ? arg : Py_None;
/* call the Python-level function */
- result = PyEval_CallObject(callback, args);
+ result = _PyObject_FastCall(callback, stack, 3, NULL);
+
PyFrame_LocalsToFast(frame, 1);
- if (result == NULL)
+ if (result == NULL) {
PyTraceBack_Here(frame);
+ }
- /* cleanup */
- Py_DECREF(args);
return result;
}