1/*[clinic input]
2preserve
3[clinic start generated code]*/
4
5PyDoc_STRVAR(list_insert__doc__,
6"insert($self, index, object, /)\n"
7"--\n"
8"\n"
9"Insert object before index.");
10
11#define LIST_INSERT_METHODDEF \
12 {"insert", (PyCFunction)(void(*)(void))list_insert, METH_FASTCALL, list_insert__doc__},
13
14static PyObject *
15list_insert_impl(PyListObject *self, Py_ssize_t index, PyObject *object);
16
17static PyObject *
18list_insert(PyListObject *self, PyObject *const *args, Py_ssize_t nargs)
19{
20 PyObject *return_value = NULL;
21 Py_ssize_t index;
22 PyObject *object;
23
24 if (!_PyArg_CheckPositional("insert", nargs, 2, 2)) {
25 goto exit;
26 }
27 {
28 Py_ssize_t ival = -1;
29 PyObject *iobj = _PyNumber_Index(args[0]);
30 if (iobj != NULL) {
31 ival = PyLong_AsSsize_t(iobj);
32 Py_DECREF(iobj);
33 }
34 if (ival == -1 && PyErr_Occurred()) {
35 goto exit;
36 }
37 index = ival;
38 }
39 object = args[1];
40 return_value = list_insert_impl(self, index, object);
41
42exit:
43 return return_value;
44}
45
46PyDoc_STRVAR(list_clear__doc__,
47"clear($self, /)\n"
48"--\n"
49"\n"
50"Remove all items from list.");
51
52#define LIST_CLEAR_METHODDEF \
53 {"clear", (PyCFunction)list_clear, METH_NOARGS, list_clear__doc__},
54
55static PyObject *
56list_clear_impl(PyListObject *self);
57
58static PyObject *
59list_clear(PyListObject *self, PyObject *Py_UNUSED(ignored))
60{
61 return list_clear_impl(self);
62}
63
64PyDoc_STRVAR(list_copy__doc__,
65"copy($self, /)\n"
66"--\n"
67"\n"
68"Return a shallow copy of the list.");
69
70#define LIST_COPY_METHODDEF \
71 {"copy", (PyCFunction)list_copy, METH_NOARGS, list_copy__doc__},
72
73static PyObject *
74list_copy_impl(PyListObject *self);
75
76static PyObject *
77list_copy(PyListObject *self, PyObject *Py_UNUSED(ignored))
78{
79 return list_copy_impl(self);
80}
81
82PyDoc_STRVAR(list_append__doc__,
83"append($self, object, /)\n"
84"--\n"
85"\n"
86"Append object to the end of the list.");
87
88#define LIST_APPEND_METHODDEF \
89 {"append", (PyCFunction)list_append, METH_O, list_append__doc__},
90
91PyDoc_STRVAR(list_extend__doc__,
92"extend($self, iterable, /)\n"
93"--\n"
94"\n"
95"Extend list by appending elements from the iterable.");
96
97#define LIST_EXTEND_METHODDEF \
98 {"extend", (PyCFunction)list_extend, METH_O, list_extend__doc__},
99
100PyDoc_STRVAR(list_pop__doc__,
101"pop($self, index=-1, /)\n"
102"--\n"
103"\n"
104"Remove and return item at index (default last).\n"
105"\n"
106"Raises IndexError if list is empty or index is out of range.");
107
108#define LIST_POP_METHODDEF \
109 {"pop", (PyCFunction)(void(*)(void))list_pop, METH_FASTCALL, list_pop__doc__},
110
111static PyObject *
112list_pop_impl(PyListObject *self, Py_ssize_t index);
113
114static PyObject *
115list_pop(PyListObject *self, PyObject *const *args, Py_ssize_t nargs)
116{
117 PyObject *return_value = NULL;
118 Py_ssize_t index = -1;
119
120 if (!_PyArg_CheckPositional("pop", nargs, 0, 1)) {
121 goto exit;
122 }
123 if (nargs < 1) {
124 goto skip_optional;
125 }
126 {
127 Py_ssize_t ival = -1;
128 PyObject *iobj = _PyNumber_Index(args[0]);
129 if (iobj != NULL) {
130 ival = PyLong_AsSsize_t(iobj);
131 Py_DECREF(iobj);
132 }
133 if (ival == -1 && PyErr_Occurred()) {
134 goto exit;
135 }
136 index = ival;
137 }
138skip_optional:
139 return_value = list_pop_impl(self, index);
140
141exit:
142 return return_value;
143}
144
145PyDoc_STRVAR(list_sort__doc__,
146"sort($self, /, *, key=None, reverse=False)\n"
147"--\n"
148"\n"
149"Sort the list in ascending order and return None.\n"
150"\n"
151"The sort is in-place (i.e. the list itself is modified) and stable (i.e. the\n"
152"order of two equal elements is maintained).\n"
153"\n"
154"If a key function is given, apply it once to each list item and sort them,\n"
155"ascending or descending, according to their function values.\n"
156"\n"
157"The reverse flag can be set to sort in descending order.");
158
159#define LIST_SORT_METHODDEF \
160 {"sort", (PyCFunction)(void(*)(void))list_sort, METH_FASTCALL|METH_KEYWORDS, list_sort__doc__},
161
162static PyObject *
163list_sort_impl(PyListObject *self, PyObject *keyfunc, int reverse);
164
165static PyObject *
166list_sort(PyListObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
167{
168 PyObject *return_value = NULL;
169 static const char * const _keywords[] = {"key", "reverse", NULL};
170 static _PyArg_Parser _parser = {NULL, _keywords, "sort", 0};
171 PyObject *argsbuf[2];
172 Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
173 PyObject *keyfunc = Py_None;
174 int reverse = 0;
175
176 args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, argsbuf);
177 if (!args) {
178 goto exit;
179 }
180 if (!noptargs) {
181 goto skip_optional_kwonly;
182 }
183 if (args[0]) {
184 keyfunc = args[0];
185 if (!--noptargs) {
186 goto skip_optional_kwonly;
187 }
188 }
189 reverse = _PyLong_AsInt(args[1]);
190 if (reverse == -1 && PyErr_Occurred()) {
191 goto exit;
192 }
193skip_optional_kwonly:
194 return_value = list_sort_impl(self, keyfunc, reverse);
195
196exit:
197 return return_value;
198}
199
200PyDoc_STRVAR(list_reverse__doc__,
201"reverse($self, /)\n"
202"--\n"
203"\n"
204"Reverse *IN PLACE*.");
205
206#define LIST_REVERSE_METHODDEF \
207 {"reverse", (PyCFunction)list_reverse, METH_NOARGS, list_reverse__doc__},
208
209static PyObject *
210list_reverse_impl(PyListObject *self);
211
212static PyObject *
213list_reverse(PyListObject *self, PyObject *Py_UNUSED(ignored))
214{
215 return list_reverse_impl(self);
216}
217
218PyDoc_STRVAR(list_index__doc__,
219"index($self, value, start=0, stop=sys.maxsize, /)\n"
220"--\n"
221"\n"
222"Return first index of value.\n"
223"\n"
224"Raises ValueError if the value is not present.");
225
226#define LIST_INDEX_METHODDEF \
227 {"index", (PyCFunction)(void(*)(void))list_index, METH_FASTCALL, list_index__doc__},
228
229static PyObject *
230list_index_impl(PyListObject *self, PyObject *value, Py_ssize_t start,
231 Py_ssize_t stop);
232
233static PyObject *
234list_index(PyListObject *self, PyObject *const *args, Py_ssize_t nargs)
235{
236 PyObject *return_value = NULL;
237 PyObject *value;
238 Py_ssize_t start = 0;
239 Py_ssize_t stop = PY_SSIZE_T_MAX;
240
241 if (!_PyArg_CheckPositional("index", nargs, 1, 3)) {
242 goto exit;
243 }
244 value = args[0];
245 if (nargs < 2) {
246 goto skip_optional;
247 }
248 if (!_PyEval_SliceIndexNotNone(args[1], &start)) {
249 goto exit;
250 }
251 if (nargs < 3) {
252 goto skip_optional;
253 }
254 if (!_PyEval_SliceIndexNotNone(args[2], &stop)) {
255 goto exit;
256 }
257skip_optional:
258 return_value = list_index_impl(self, value, start, stop);
259
260exit:
261 return return_value;
262}
263
264PyDoc_STRVAR(list_count__doc__,
265"count($self, value, /)\n"
266"--\n"
267"\n"
268"Return number of occurrences of value.");
269
270#define LIST_COUNT_METHODDEF \
271 {"count", (PyCFunction)list_count, METH_O, list_count__doc__},
272
273PyDoc_STRVAR(list_remove__doc__,
274"remove($self, value, /)\n"
275"--\n"
276"\n"
277"Remove first occurrence of value.\n"
278"\n"
279"Raises ValueError if the value is not present.");
280
281#define LIST_REMOVE_METHODDEF \
282 {"remove", (PyCFunction)list_remove, METH_O, list_remove__doc__},
283
284PyDoc_STRVAR(list___init____doc__,
285"list(iterable=(), /)\n"
286"--\n"
287"\n"
288"Built-in mutable sequence.\n"
289"\n"
290"If no argument is given, the constructor creates a new empty list.\n"
291"The argument must be an iterable if specified.");
292
293static int
294list___init___impl(PyListObject *self, PyObject *iterable);
295
296static int
297list___init__(PyObject *self, PyObject *args, PyObject *kwargs)
298{
299 int return_value = -1;
300 PyObject *iterable = NULL;
301
302 if (Py_IS_TYPE(self, &PyList_Type) &&
303 !_PyArg_NoKeywords("list", kwargs)) {
304 goto exit;
305 }
306 if (!_PyArg_CheckPositional("list", PyTuple_GET_SIZE(args), 0, 1)) {
307 goto exit;
308 }
309 if (PyTuple_GET_SIZE(args) < 1) {
310 goto skip_optional;
311 }
312 iterable = PyTuple_GET_ITEM(args, 0);
313skip_optional:
314 return_value = list___init___impl((PyListObject *)self, iterable);
315
316exit:
317 return return_value;
318}
319
320PyDoc_STRVAR(list___sizeof____doc__,
321"__sizeof__($self, /)\n"
322"--\n"
323"\n"
324"Return the size of the list in memory, in bytes.");
325
326#define LIST___SIZEOF___METHODDEF \
327 {"__sizeof__", (PyCFunction)list___sizeof__, METH_NOARGS, list___sizeof____doc__},
328
329static PyObject *
330list___sizeof___impl(PyListObject *self);
331
332static PyObject *
333list___sizeof__(PyListObject *self, PyObject *Py_UNUSED(ignored))
334{
335 return list___sizeof___impl(self);
336}
337
338PyDoc_STRVAR(list___reversed____doc__,
339"__reversed__($self, /)\n"
340"--\n"
341"\n"
342"Return a reverse iterator over the list.");
343
344#define LIST___REVERSED___METHODDEF \
345 {"__reversed__", (PyCFunction)list___reversed__, METH_NOARGS, list___reversed____doc__},
346
347static PyObject *
348list___reversed___impl(PyListObject *self);
349
350static PyObject *
351list___reversed__(PyListObject *self, PyObject *Py_UNUSED(ignored))
352{
353 return list___reversed___impl(self);
354}
355/*[clinic end generated code: output=0063aad535edf62d input=a9049054013a1b77]*/
356