summaryrefslogtreecommitdiff
path: root/Python/bltinmodule.c
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2017-01-17 15:17:49 +0100
committerVictor Stinner <victor.stinner@gmail.com>2017-01-17 15:17:49 +0100
commit5a60ecaa7ac2bf0452da717f95d572bb053c8817 (patch)
treee9452b2e4c68a76aaebdd65e63fceaa211ca38e8 /Python/bltinmodule.c
parentfda6d0acf0cb8e683640e6a3a404a371cb68b145 (diff)
downloadcpython-git-5a60ecaa7ac2bf0452da717f95d572bb053c8817.tar.gz
sorted() uses METH_FASTCALL
Diffstat (limited to 'Python/bltinmodule.c')
-rw-r--r--Python/bltinmodule.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 9487a5364a..cde2b75829 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);