mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00

We only statically initialize for core code and builtin modules. Extension modules still create the tuple at runtime. We'll solve that part of interpreter isolation separately. This change includes generated code. The non-generated changes are in: * Tools/clinic/clinic.py * Python/getargs.c * Include/cpython/modsupport.h * Makefile.pre.in (re-generate global strings after running clinic) * very minor tweaks to Modules/_codecsmodule.c and Python/Python-tokenize.c All other changes are generated code (clinic, global strings).
121 lines
3.1 KiB
C
Generated
121 lines
3.1 KiB
C
Generated
/*[clinic input]
|
|
preserve
|
|
[clinic start generated code]*/
|
|
|
|
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
|
|
# include "pycore_gc.h" // PyGC_Head
|
|
# include "pycore_runtime.h" // _Py_ID()
|
|
#endif
|
|
|
|
|
|
PyDoc_STRVAR(tuple_index__doc__,
|
|
"index($self, value, start=0, stop=sys.maxsize, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Return first index of value.\n"
|
|
"\n"
|
|
"Raises ValueError if the value is not present.");
|
|
|
|
#define TUPLE_INDEX_METHODDEF \
|
|
{"index", _PyCFunction_CAST(tuple_index), METH_FASTCALL, tuple_index__doc__},
|
|
|
|
static PyObject *
|
|
tuple_index_impl(PyTupleObject *self, PyObject *value, Py_ssize_t start,
|
|
Py_ssize_t stop);
|
|
|
|
static PyObject *
|
|
tuple_index(PyTupleObject *self, PyObject *const *args, Py_ssize_t nargs)
|
|
{
|
|
PyObject *return_value = NULL;
|
|
PyObject *value;
|
|
Py_ssize_t start = 0;
|
|
Py_ssize_t stop = PY_SSIZE_T_MAX;
|
|
|
|
if (!_PyArg_CheckPositional("index", nargs, 1, 3)) {
|
|
goto exit;
|
|
}
|
|
value = args[0];
|
|
if (nargs < 2) {
|
|
goto skip_optional;
|
|
}
|
|
if (!_PyEval_SliceIndexNotNone(args[1], &start)) {
|
|
goto exit;
|
|
}
|
|
if (nargs < 3) {
|
|
goto skip_optional;
|
|
}
|
|
if (!_PyEval_SliceIndexNotNone(args[2], &stop)) {
|
|
goto exit;
|
|
}
|
|
skip_optional:
|
|
return_value = tuple_index_impl(self, value, start, stop);
|
|
|
|
exit:
|
|
return return_value;
|
|
}
|
|
|
|
PyDoc_STRVAR(tuple_count__doc__,
|
|
"count($self, value, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Return number of occurrences of value.");
|
|
|
|
#define TUPLE_COUNT_METHODDEF \
|
|
{"count", (PyCFunction)tuple_count, METH_O, tuple_count__doc__},
|
|
|
|
PyDoc_STRVAR(tuple_new__doc__,
|
|
"tuple(iterable=(), /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Built-in immutable sequence.\n"
|
|
"\n"
|
|
"If no argument is given, the constructor returns an empty tuple.\n"
|
|
"If iterable is specified the tuple is initialized from iterable\'s items.\n"
|
|
"\n"
|
|
"If the argument is a tuple, the return value is the same object.");
|
|
|
|
static PyObject *
|
|
tuple_new_impl(PyTypeObject *type, PyObject *iterable);
|
|
|
|
static PyObject *
|
|
tuple_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
|
|
{
|
|
PyObject *return_value = NULL;
|
|
PyObject *iterable = NULL;
|
|
|
|
if ((type == &PyTuple_Type ||
|
|
type->tp_init == PyTuple_Type.tp_init) &&
|
|
!_PyArg_NoKeywords("tuple", kwargs)) {
|
|
goto exit;
|
|
}
|
|
if (!_PyArg_CheckPositional("tuple", PyTuple_GET_SIZE(args), 0, 1)) {
|
|
goto exit;
|
|
}
|
|
if (PyTuple_GET_SIZE(args) < 1) {
|
|
goto skip_optional;
|
|
}
|
|
iterable = PyTuple_GET_ITEM(args, 0);
|
|
skip_optional:
|
|
return_value = tuple_new_impl(type, iterable);
|
|
|
|
exit:
|
|
return return_value;
|
|
}
|
|
|
|
PyDoc_STRVAR(tuple___getnewargs____doc__,
|
|
"__getnewargs__($self, /)\n"
|
|
"--\n"
|
|
"\n");
|
|
|
|
#define TUPLE___GETNEWARGS___METHODDEF \
|
|
{"__getnewargs__", (PyCFunction)tuple___getnewargs__, METH_NOARGS, tuple___getnewargs____doc__},
|
|
|
|
static PyObject *
|
|
tuple___getnewargs___impl(PyTupleObject *self);
|
|
|
|
static PyObject *
|
|
tuple___getnewargs__(PyTupleObject *self, PyObject *Py_UNUSED(ignored))
|
|
{
|
|
return tuple___getnewargs___impl(self);
|
|
}
|
|
/*[clinic end generated code: output=441d2b880e865f87 input=a9049054013a1b77]*/
|