Branch data Line data Source code
1 : : /*[clinic input]
2 : : preserve
3 : : [clinic start generated code]*/
4 : :
5 : : #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
6 : : # include "pycore_gc.h" // PyGC_Head
7 : : # include "pycore_runtime.h" // _Py_ID()
8 : : #endif
9 : :
10 : :
11 : : PyDoc_STRVAR(tuple_index__doc__,
12 : : "index($self, value, start=0, stop=sys.maxsize, /)\n"
13 : : "--\n"
14 : : "\n"
15 : : "Return first index of value.\n"
16 : : "\n"
17 : : "Raises ValueError if the value is not present.");
18 : :
19 : : #define TUPLE_INDEX_METHODDEF \
20 : : {"index", _PyCFunction_CAST(tuple_index), METH_FASTCALL, tuple_index__doc__},
21 : :
22 : : static PyObject *
23 : : tuple_index_impl(PyTupleObject *self, PyObject *value, Py_ssize_t start,
24 : : Py_ssize_t stop);
25 : :
26 : : static PyObject *
27 : 3 : tuple_index(PyTupleObject *self, PyObject *const *args, Py_ssize_t nargs)
28 : : {
29 : 3 : PyObject *return_value = NULL;
30 : : PyObject *value;
31 : 3 : Py_ssize_t start = 0;
32 : 3 : Py_ssize_t stop = PY_SSIZE_T_MAX;
33 : :
34 [ + - - + : 3 : if (!_PyArg_CheckPositional("index", nargs, 1, 3)) {
- - ]
35 : 0 : goto exit;
36 : : }
37 : 3 : value = args[0];
38 [ + - ]: 3 : if (nargs < 2) {
39 : 3 : goto skip_optional;
40 : : }
41 [ # # ]: 0 : if (!_PyEval_SliceIndexNotNone(args[1], &start)) {
42 : 0 : goto exit;
43 : : }
44 [ # # ]: 0 : if (nargs < 3) {
45 : 0 : goto skip_optional;
46 : : }
47 [ # # ]: 0 : if (!_PyEval_SliceIndexNotNone(args[2], &stop)) {
48 : 0 : goto exit;
49 : : }
50 : 0 : skip_optional:
51 : 3 : return_value = tuple_index_impl(self, value, start, stop);
52 : :
53 : 3 : exit:
54 : 3 : return return_value;
55 : : }
56 : :
57 : : PyDoc_STRVAR(tuple_count__doc__,
58 : : "count($self, value, /)\n"
59 : : "--\n"
60 : : "\n"
61 : : "Return number of occurrences of value.");
62 : :
63 : : #define TUPLE_COUNT_METHODDEF \
64 : : {"count", (PyCFunction)tuple_count, METH_O, tuple_count__doc__},
65 : :
66 : : PyDoc_STRVAR(tuple_new__doc__,
67 : : "tuple(iterable=(), /)\n"
68 : : "--\n"
69 : : "\n"
70 : : "Built-in immutable sequence.\n"
71 : : "\n"
72 : : "If no argument is given, the constructor returns an empty tuple.\n"
73 : : "If iterable is specified the tuple is initialized from iterable\'s items.\n"
74 : : "\n"
75 : : "If the argument is a tuple, the return value is the same object.");
76 : :
77 : : static PyObject *
78 : : tuple_new_impl(PyTypeObject *type, PyObject *iterable);
79 : :
80 : : static PyObject *
81 : 249 : tuple_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
82 : : {
83 : 249 : PyObject *return_value = NULL;
84 : 249 : PyTypeObject *base_tp = &PyTuple_Type;
85 : 249 : PyObject *iterable = NULL;
86 : :
87 [ + - + + : 249 : if ((type == base_tp || type->tp_init == base_tp->tp_init) &&
- + ]
88 [ # # ]: 0 : !_PyArg_NoKeywords("tuple", kwargs)) {
89 : 0 : goto exit;
90 : : }
91 [ + - - + : 249 : if (!_PyArg_CheckPositional("tuple", PyTuple_GET_SIZE(args), 0, 1)) {
- - ]
92 : 0 : goto exit;
93 : : }
94 [ - + ]: 249 : if (PyTuple_GET_SIZE(args) < 1) {
95 : 0 : goto skip_optional;
96 : : }
97 : 249 : iterable = PyTuple_GET_ITEM(args, 0);
98 : 249 : skip_optional:
99 : 249 : return_value = tuple_new_impl(type, iterable);
100 : :
101 : 249 : exit:
102 : 249 : return return_value;
103 : : }
104 : :
105 : : PyDoc_STRVAR(tuple___getnewargs____doc__,
106 : : "__getnewargs__($self, /)\n"
107 : : "--\n"
108 : : "\n");
109 : :
110 : : #define TUPLE___GETNEWARGS___METHODDEF \
111 : : {"__getnewargs__", (PyCFunction)tuple___getnewargs__, METH_NOARGS, tuple___getnewargs____doc__},
112 : :
113 : : static PyObject *
114 : : tuple___getnewargs___impl(PyTupleObject *self);
115 : :
116 : : static PyObject *
117 : 0 : tuple___getnewargs__(PyTupleObject *self, PyObject *Py_UNUSED(ignored))
118 : : {
119 : 0 : return tuple___getnewargs___impl(self);
120 : : }
121 : : /*[clinic end generated code: output=48a9e0834b300ac3 input=a9049054013a1b77]*/
|