From 5a60ecaa7ac2bf0452da717f95d572bb053c8817 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 17 Jan 2017 15:17:49 +0100 Subject: sorted() uses METH_FASTCALL --- Python/bltinmodule.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 9487a53..cde2b75 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -2121,20 +2121,20 @@ PyDoc_STRVAR(builtin_sorted__doc__, "reverse flag can be set to request the result in descending order."); #define BUILTIN_SORTED_METHODDEF \ - {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS|METH_KEYWORDS, builtin_sorted__doc__}, + {"sorted", (PyCFunction)builtin_sorted, METH_FASTCALL, builtin_sorted__doc__}, static PyObject * -builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds) +builtin_sorted(PyObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) { - PyObject *newlist, *v, *seq, *keyfunc=NULL, **newargs; + PyObject *newlist, *v, *seq, *keyfunc=NULL; PyObject *callable; - static char *kwlist[] = {"iterable", "key", "reverse", 0}; + static const char * const kwlist[] = {"iterable", "key", "reverse", 0}; + /* args 1-3 should match listsort in Objects/listobject.c */ + static _PyArg_Parser parser = {"O|Oi:sorted", kwlist, 0}; int reverse; - Py_ssize_t nargs; - /* args 1-3 should match listsort in Objects/listobject.c */ - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted", - kwlist, &seq, &keyfunc, &reverse)) + if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &parser, + &seq, &keyfunc, &reverse)) return NULL; newlist = PySequence_List(seq); @@ -2147,9 +2147,7 @@ builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds) return NULL; } - newargs = &PyTuple_GET_ITEM(args, 1); - nargs = PyTuple_GET_SIZE(args) - 1; - v = _PyObject_FastCallDict(callable, newargs, nargs, kwds); + v = _PyObject_FastCallKeywords(callable, args + 1, nargs - 1, kwnames); Py_DECREF(callable); if (v == NULL) { Py_DECREF(newlist); -- cgit v0.12