summaryrefslogtreecommitdiffstats
path: root/Objects/listobject.c
diff options
context:
space:
mode:
Diffstat (limited to 'Objects/listobject.c')
-rw-r--r--Objects/listobject.c61
1 files changed, 54 insertions, 7 deletions
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 851e27c..4e9ad0c 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -572,6 +572,35 @@ listappend(self, args)
return ins(self, (int) self->ob_size, v);
}
+static PyObject *
+listpop(self, args)
+ PyListObject *self;
+ PyObject *args;
+{
+ int i = -1;
+ PyObject *v;
+ if (!PyArg_ParseTuple(args, "|i", &i))
+ return NULL;
+ if (self->ob_size == 0) {
+ /* Special-case most common failure cause */
+ PyErr_SetString(PyExc_IndexError, "pop from empty list");
+ return NULL;
+ }
+ if (i < 0)
+ i += self->ob_size;
+ if (i < 0 || i >= self->ob_size) {
+ PyErr_SetString(PyExc_IndexError, "pop index out of range");
+ return NULL;
+ }
+ v = self->ob_item[i];
+ Py_INCREF(v);
+ if (list_ass_slice(self, i, i+1, (PyObject *)NULL) != 0) {
+ Py_DECREF(v);
+ return NULL;
+ }
+ return v;
+}
+
/* New quicksort implementation for arrays of object pointers.
Thanks to discussions with Tim Peters. */
@@ -1282,14 +1311,32 @@ listremove(self, args)
return NULL;
}
+static char append_doc[] =
+"L.append(object) -- append object to end";
+static char insert_doc[] =
+"L.insert(index, object) -- insert object before index";
+static char pop_doc[] =
+"L.pop([index]) -> item -- remove and return item at index (default last)";
+static char remove_doc[] =
+"L.remove(value) -- remove first occurrence of value";
+static char index_doc[] =
+"L.index(value) -> integer -- return index of first occurrence of value";
+static char count_doc[] =
+"L.count(value) -> integer -- return number of occurrences of value";
+static char reverse_doc[] =
+"L.reverse() -- reverse *IN PLACE*";
+static char sort_doc[] =
+"L.sort([cmpfunc]) -- sort *IN PLACE*; if given, cmpfunc(x, y) -> -1, 0, 1";
+
static PyMethodDef list_methods[] = {
- {"append", (PyCFunction)listappend},
- {"insert", (PyCFunction)listinsert},
- {"remove", (PyCFunction)listremove},
- {"index", (PyCFunction)listindex},
- {"count", (PyCFunction)listcount},
- {"reverse", (PyCFunction)listreverse},
- {"sort", (PyCFunction)listsort, 0},
+ {"append", (PyCFunction)listappend, 0, append_doc},
+ {"insert", (PyCFunction)listinsert, 0, insert_doc},
+ {"pop", (PyCFunction)listpop, 1, pop_doc},
+ {"remove", (PyCFunction)listremove, 0, remove_doc},
+ {"index", (PyCFunction)listindex, 0, index_doc},
+ {"count", (PyCFunction)listcount, 0, count_doc},
+ {"reverse", (PyCFunction)listreverse, 0, reverse_doc},
+ {"sort", (PyCFunction)listsort, 0, sort_doc},
{NULL, NULL} /* sentinel */
};