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