summaryrefslogtreecommitdiffstats
path: root/Objects/listobject.c
diff options
context:
space:
mode:
Diffstat (limited to 'Objects/listobject.c')
-rw-r--r--Objects/listobject.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 19967ca..d688179 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -2324,7 +2324,7 @@ list_sizeof(PyListObject *self)
{
Py_ssize_t res;
- res = sizeof(PyListObject) + self->allocated * sizeof(void*);
+ res = _PyObject_SIZE(Py_TYPE(self)) + self->allocated * sizeof(void*);
return PyLong_FromSsize_t(res);
}
@@ -2447,7 +2447,7 @@ list_subscript(PyListObject* self, PyObject* item)
}
else {
PyErr_Format(PyExc_TypeError,
- "list indices must be integers, not %.200s",
+ "list indices must be integers or slices, not %.200s",
item->ob_type->tp_name);
return NULL;
}
@@ -2611,7 +2611,7 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
}
else {
PyErr_Format(PyExc_TypeError,
- "list indices must be integers, not %.200s",
+ "list indices must be integers or slices, not %.200s",
item->ob_type->tp_name);
return -1;
}
@@ -2782,8 +2782,8 @@ listiter_next(listiterobject *it)
return item;
}
- Py_DECREF(seq);
it->it_seq = NULL;
+ Py_DECREF(seq);
return NULL;
}
@@ -2912,9 +2912,17 @@ static PyObject *
listreviter_next(listreviterobject *it)
{
PyObject *item;
- Py_ssize_t index = it->it_index;
- PyListObject *seq = it->it_seq;
+ Py_ssize_t index;
+ PyListObject *seq;
+
+ assert(it != NULL);
+ seq = it->it_seq;
+ if (seq == NULL) {
+ return NULL;
+ }
+ assert(PyList_Check(seq));
+ index = it->it_index;
if (index>=0 && index < PyList_GET_SIZE(seq)) {
item = PyList_GET_ITEM(seq, index);
it->it_index--;
@@ -2922,10 +2930,8 @@ listreviter_next(listreviterobject *it)
return item;
}
it->it_index = -1;
- if (seq != NULL) {
- it->it_seq = NULL;
- Py_DECREF(seq);
- }
+ it->it_seq = NULL;
+ Py_DECREF(seq);
return NULL;
}