diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2017-01-17 14:17:49 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2017-01-17 14:17:49 (GMT) |
commit | 5a60ecaa7ac2bf0452da717f95d572bb053c8817 (patch) | |
tree | e9452b2e4c68a76aaebdd65e63fceaa211ca38e8 /Python | |
parent | fda6d0acf0cb8e683640e6a3a404a371cb68b145 (diff) | |
download | cpython-5a60ecaa7ac2bf0452da717f95d572bb053c8817.zip cpython-5a60ecaa7ac2bf0452da717f95d572bb053c8817.tar.gz cpython-5a60ecaa7ac2bf0452da717f95d572bb053c8817.tar.bz2 |
sorted() uses METH_FASTCALL
Diffstat (limited to 'Python')
-rw-r--r-- | Python/bltinmodule.c | 20 |
1 files 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); |