Skip to content

Commit

Permalink
bpo-41922: Use PEP 590 vectorcall to speed up reversed() (pythonGH-22523
Browse files Browse the repository at this point in the history
)
  • Loading branch information
corona10 authored Oct 3, 2020
1 parent 3fe6148 commit d646e91
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Speed up calls to ``reversed()`` by using the :pep:`590` ``vectorcall``
calling convention. Patch by Dong-hee Na.
19 changes: 19 additions & 0 deletions Objects/enumobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,24 @@ reversed_new_impl(PyTypeObject *type, PyObject *seq)
return (PyObject *)ro;
}

static PyObject *
reversed_vectorcall(PyObject *type, PyObject * const*args,
size_t nargsf, PyObject *kwnames)
{
assert(PyType_Check(type));

if (!_PyArg_NoKwnames("reversed", kwnames)) {
return NULL;
}

Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
if (!_PyArg_CheckPositional("reversed", nargs, 1, 1)) {
return NULL;
}

return reversed_new_impl((PyTypeObject *)type, args[0]);
}

static void
reversed_dealloc(reversedobject *ro)
{
Expand Down Expand Up @@ -445,4 +463,5 @@ PyTypeObject PyReversed_Type = {
PyType_GenericAlloc, /* tp_alloc */
reversed_new, /* tp_new */
PyObject_GC_Del, /* tp_free */
.tp_vectorcall = (vectorcallfunc)reversed_vectorcall,
};

0 comments on commit d646e91

Please sign in to comment.