summaryrefslogtreecommitdiff
path: root/Objects/longobject.c
diff options
context:
space:
mode:
authorMark Dickinson <dickinsm@gmail.com>2023-02-05 10:02:53 +0000
committerGitHub <noreply@github.com>2023-02-05 10:02:53 +0000
commit39017e04b55d4c110787551dc9a0cb753f27d700 (patch)
tree43c39ae5fa296b5bf195614330b0441d6c96db7a /Objects/longobject.c
parent9b60ee976a6b66fe96c2d39051612999c26561e5 (diff)
downloadcpython-git-39017e04b55d4c110787551dc9a0cb753f27d700.tar.gz
gh-101266: Fix __sizeof__ for subclasses of int (#101394)
Fix the behaviour of the `__sizeof__` method (and hence the results returned by `sys.getsizeof`) for subclasses of `int`. Previously, `int` subclasses gave identical results to the `int` base class, ignoring the presence of the instance dictionary. <!-- gh-issue-number: gh-101266 --> * Issue: gh-101266 <!-- /gh-issue-number -->
Diffstat (limited to 'Objects/longobject.c')
-rw-r--r--Objects/longobject.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/Objects/longobject.c b/Objects/longobject.c
index 65bf15648b..8293f133be 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -5882,13 +5882,10 @@ static Py_ssize_t
int___sizeof___impl(PyObject *self)
/*[clinic end generated code: output=3303f008eaa6a0a5 input=9b51620c76fc4507]*/
{
- Py_ssize_t res;
-
- res = offsetof(PyLongObject, long_value.ob_digit)
- /* using Py_MAX(..., 1) because we always allocate space for at least
- one digit, even though the integer zero has a Py_SIZE of 0 */
- + Py_MAX(Py_ABS(Py_SIZE(self)), 1)*sizeof(digit);
- return res;
+ /* using Py_MAX(..., 1) because we always allocate space for at least
+ one digit, even though the integer zero has a Py_SIZE of 0 */
+ Py_ssize_t ndigits = Py_MAX(Py_ABS(Py_SIZE(self)), 1);
+ return Py_TYPE(self)->tp_basicsize + Py_TYPE(self)->tp_itemsize * ndigits;
}
/*[clinic input]