diff options
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/tupleobject.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c index 52ecb54..14ab53f 100644 --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -706,6 +706,26 @@ tuple_new_impl(PyTypeObject *type, PyObject *iterable) } static PyObject * +tuple_vectorcall(PyObject *type, PyObject * const*args, + size_t nargsf, PyObject *kwnames) +{ + if (kwnames && PyTuple_GET_SIZE(kwnames) != 0) { + PyErr_Format(PyExc_TypeError, "tuple() takes no keyword arguments"); + return NULL; + } + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); + if (nargs > 1) { + PyErr_Format(PyExc_TypeError, "tuple() expected at most 1 argument, got %zd", nargs); + return NULL; + } + + if (nargs) { + return tuple_new_impl((PyTypeObject *)type, args[0]); + } + return PyTuple_New(0); +} + +static PyObject * tuple_subtype_new(PyTypeObject *type, PyObject *iterable) { PyObject *tmp, *newobj, *item; @@ -863,6 +883,7 @@ PyTypeObject PyTuple_Type = { 0, /* tp_alloc */ tuple_new, /* tp_new */ PyObject_GC_Del, /* tp_free */ + .tp_vectorcall = tuple_vectorcall, }; /* The following function breaks the notion that tuples are immutable: |