Issue #23629: Fix the default __sizeof__ implementation for variable-sized objects.

This commit is contained in:
Antoine Pitrou 2015-03-10 22:35:24 +01:00
commit 63afdaa110
6 changed files with 22 additions and 52 deletions

View file

@ -759,27 +759,15 @@ tuple_getnewargs(PyTupleObject *v)
}
static PyObject *
tuple_sizeof(PyTupleObject *self)
{
Py_ssize_t res;
res = PyTuple_Type.tp_basicsize + Py_SIZE(self) * sizeof(PyObject *);
return PyLong_FromSsize_t(res);
}
PyDoc_STRVAR(index_doc,
"T.index(value, [start, [stop]]) -> integer -- return first index of value.\n"
"Raises ValueError if the value is not present."
);
PyDoc_STRVAR(count_doc,
"T.count(value) -> integer -- return number of occurrences of value");
PyDoc_STRVAR(sizeof_doc,
"T.__sizeof__() -- size of T in memory, in bytes");
static PyMethodDef tuple_methods[] = {
{"__getnewargs__", (PyCFunction)tuple_getnewargs, METH_NOARGS},
{"__sizeof__", (PyCFunction)tuple_sizeof, METH_NOARGS, sizeof_doc},
{"index", (PyCFunction)tupleindex, METH_VARARGS, index_doc},
{"count", (PyCFunction)tuplecount, METH_O, count_doc},
{NULL, NULL} /* sentinel */