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_CAST(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_CAST(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_CAST(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_CAST(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 Py_TYPE(self)->tp_new == PyList_Type.tp_new) && 304 !_PyArg_NoKeywords("list", kwargs)) { 305 goto exit; 306 } 307 if (!_PyArg_CheckPositional("list", PyTuple_GET_SIZE(args), 0, 1)) { 308 goto exit; 309 } 310 if (PyTuple_GET_SIZE(args) < 1) { 311 goto skip_optional; 312 } 313 iterable = PyTuple_GET_ITEM(args, 0); 314skip_optional: 315 return_value = list___init___impl((PyListObject *)self, iterable); 316 317exit: 318 return return_value; 319} 320 321PyDoc_STRVAR(list___sizeof____doc__, 322"__sizeof__($self, /)\n" 323"--\n" 324"\n" 325"Return the size of the list in memory, in bytes."); 326 327#define LIST___SIZEOF___METHODDEF \ 328 {"__sizeof__", (PyCFunction)list___sizeof__, METH_NOARGS, list___sizeof____doc__}, 329 330static PyObject * 331list___sizeof___impl(PyListObject *self); 332 333static PyObject * 334list___sizeof__(PyListObject *self, PyObject *Py_UNUSED(ignored)) 335{ 336 return list___sizeof___impl(self); 337} 338 339PyDoc_STRVAR(list___reversed____doc__, 340"__reversed__($self, /)\n" 341"--\n" 342"\n" 343"Return a reverse iterator over the list."); 344 345#define LIST___REVERSED___METHODDEF \ 346 {"__reversed__", (PyCFunction)list___reversed__, METH_NOARGS, list___reversed____doc__}, 347 348static PyObject * 349list___reversed___impl(PyListObject *self); 350 351static PyObject * 352list___reversed__(PyListObject *self, PyObject *Py_UNUSED(ignored)) 353{ 354 return list___reversed___impl(self); 355} 356/*[clinic end generated code: output=eab97a76b1568a03 input=a9049054013a1b77]*/ 357