mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
gh-99845: Use size_t type in __sizeof__() methods (#99846)
The implementation of __sizeof__() methods using _PyObject_SIZE() now use an unsigned type (size_t) to compute the size, rather than a signed type (Py_ssize_t). Cast explicitly signed (Py_ssize_t) values to unsigned type (Py_ssize_t).
This commit is contained in:
parent
18a6967544
commit
85dd6cb6df
15 changed files with 85 additions and 108 deletions
|
@ -2151,10 +2151,9 @@ static PyObject *
|
|||
bytearray_sizeof_impl(PyByteArrayObject *self)
|
||||
/*[clinic end generated code: output=738abdd17951c427 input=e27320fd98a4bc5a]*/
|
||||
{
|
||||
Py_ssize_t res;
|
||||
|
||||
res = _PyObject_SIZE(Py_TYPE(self)) + self->ob_alloc * sizeof(char);
|
||||
return PyLong_FromSsize_t(res);
|
||||
size_t res = _PyObject_SIZE(Py_TYPE(self));
|
||||
res += (size_t)self->ob_alloc * sizeof(char);
|
||||
return PyLong_FromSize_t(res);
|
||||
}
|
||||
|
||||
static PySequenceMethods bytearray_as_sequence = {
|
||||
|
|
|
@ -2806,10 +2806,9 @@ static PyObject *
|
|||
list___sizeof___impl(PyListObject *self)
|
||||
/*[clinic end generated code: output=3417541f95f9a53e input=b8030a5d5ce8a187]*/
|
||||
{
|
||||
Py_ssize_t res;
|
||||
|
||||
res = _PyObject_SIZE(Py_TYPE(self)) + self->allocated * sizeof(void*);
|
||||
return PyLong_FromSsize_t(res);
|
||||
size_t res = _PyObject_SIZE(Py_TYPE(self));
|
||||
res += (size_t)self->allocated * sizeof(void*);
|
||||
return PyLong_FromSize_t(res);
|
||||
}
|
||||
|
||||
static PyObject *list_iter(PyObject *seq);
|
||||
|
|
|
@ -1957,12 +1957,11 @@ done:
|
|||
static PyObject *
|
||||
set_sizeof(PySetObject *so, PyObject *Py_UNUSED(ignored))
|
||||
{
|
||||
Py_ssize_t res;
|
||||
|
||||
res = _PyObject_SIZE(Py_TYPE(so));
|
||||
if (so->table != so->smalltable)
|
||||
res = res + (so->mask + 1) * sizeof(setentry);
|
||||
return PyLong_FromSsize_t(res);
|
||||
size_t res = _PyObject_SIZE(Py_TYPE(so));
|
||||
if (so->table != so->smalltable) {
|
||||
res += ((size_t)so->mask + 1) * sizeof(setentry);
|
||||
}
|
||||
return PyLong_FromSize_t(res);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(sizeof_doc, "S.__sizeof__() -> size of S in memory, in bytes");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue