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 {
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
42 exit:
43 return return_value;
44 }
45
46 PyDoc_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
55 static PyObject *
56 list_clear_impl(PyListObject *self);
57
58 static PyObject *
list_clear(PyListObject * self,PyObject * Py_UNUSED (ignored))59 list_clear(PyListObject *self, PyObject *Py_UNUSED(ignored))
60 {
61 return list_clear_impl(self);
62 }
63
64 PyDoc_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
73 static PyObject *
74 list_copy_impl(PyListObject *self);
75
76 static PyObject *
list_copy(PyListObject * self,PyObject * Py_UNUSED (ignored))77 list_copy(PyListObject *self, PyObject *Py_UNUSED(ignored))
78 {
79 return list_copy_impl(self);
80 }
81
82 PyDoc_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
91 PyDoc_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
100 PyDoc_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
111 static PyObject *
112 list_pop_impl(PyListObject *self, Py_ssize_t index);
113
114 static PyObject *
list_pop(PyListObject * self,PyObject * const * args,Py_ssize_t nargs)115 list_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 }
138 skip_optional:
139 return_value = list_pop_impl(self, index);
140
141 exit:
142 return return_value;
143 }
144
145 PyDoc_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
162 static PyObject *
163 list_sort_impl(PyListObject *self, PyObject *keyfunc, int reverse);
164
165 static PyObject *
list_sort(PyListObject * self,PyObject * const * args,Py_ssize_t nargs,PyObject * kwnames)166 list_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 }
193 skip_optional_kwonly:
194 return_value = list_sort_impl(self, keyfunc, reverse);
195
196 exit:
197 return return_value;
198 }
199
200 PyDoc_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
209 static PyObject *
210 list_reverse_impl(PyListObject *self);
211
212 static PyObject *
list_reverse(PyListObject * self,PyObject * Py_UNUSED (ignored))213 list_reverse(PyListObject *self, PyObject *Py_UNUSED(ignored))
214 {
215 return list_reverse_impl(self);
216 }
217
218 PyDoc_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
229 static PyObject *
230 list_index_impl(PyListObject *self, PyObject *value, Py_ssize_t start,
231 Py_ssize_t stop);
232
233 static PyObject *
list_index(PyListObject * self,PyObject * const * args,Py_ssize_t nargs)234 list_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 }
257 skip_optional:
258 return_value = list_index_impl(self, value, start, stop);
259
260 exit:
261 return return_value;
262 }
263
264 PyDoc_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
273 PyDoc_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
284 PyDoc_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
293 static int
294 list___init___impl(PyListObject *self, PyObject *iterable);
295
296 static int
list___init__(PyObject * self,PyObject * args,PyObject * kwargs)297 list___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);
313 skip_optional:
314 return_value = list___init___impl((PyListObject *)self, iterable);
315
316 exit:
317 return return_value;
318 }
319
320 PyDoc_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
329 static PyObject *
330 list___sizeof___impl(PyListObject *self);
331
332 static PyObject *
list___sizeof__(PyListObject * self,PyObject * Py_UNUSED (ignored))333 list___sizeof__(PyListObject *self, PyObject *Py_UNUSED(ignored))
334 {
335 return list___sizeof___impl(self);
336 }
337
338 PyDoc_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
347 static PyObject *
348 list___reversed___impl(PyListObject *self);
349
350 static PyObject *
list___reversed__(PyListObject * self,PyObject * Py_UNUSED (ignored))351 list___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