Skip to content

Commit 357c542

Browse files
committed
Revert "gh-101266: Fix __sizeof__ for subclasses of int (#101394)"
This reverts commit 39017e0.
1 parent dfc2e06 commit 357c542

File tree

3 files changed

+9
-47
lines changed

3 files changed

+9
-47
lines changed

‎Lib/test/test_long.py‎

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1601,44 +1601,5 @@ def test_square(self):
16011601
self.assertEqual(n**2,
16021602
(1 << (2 * bitlen)) - (1 << (bitlen + 1)) + 1)
16031603

1604-
def test___sizeof__(self):
1605-
self.assertEqual(int.__itemsize__, sys.int_info.sizeof_digit)
1606-
1607-
# Pairs (test_value, number of allocated digits)
1608-
test_values = [
1609-
# We always allocate space for at least one digit, even for
1610-
# a value of zero; sys.getsizeof should reflect that.
1611-
(0, 1),
1612-
(1, 1),
1613-
(-1, 1),
1614-
(BASE-1, 1),
1615-
(1-BASE, 1),
1616-
(BASE, 2),
1617-
(-BASE, 2),
1618-
(BASE*BASE - 1, 2),
1619-
(BASE*BASE, 3),
1620-
]
1621-
1622-
for value, ndigits in test_values:
1623-
with self.subTest(value):
1624-
self.assertEqual(
1625-
value.__sizeof__(),
1626-
int.__basicsize__ + int.__itemsize__ * ndigits
1627-
)
1628-
1629-
# Same test for a subclass of int.
1630-
class MyInt(int):
1631-
pass
1632-
1633-
self.assertEqual(MyInt.__itemsize__, sys.int_info.sizeof_digit)
1634-
1635-
for value, ndigits in test_values:
1636-
with self.subTest(value):
1637-
self.assertEqual(
1638-
MyInt(value).__sizeof__(),
1639-
MyInt.__basicsize__ + MyInt.__itemsize__ * ndigits
1640-
)
1641-
1642-
16431604
if __name__ == "__main__":
16441605
unittest.main()

‎Objects/boolobject.c‎

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
#include "pycore_object.h" // _Py_FatalRefcountError()
55
#include "pycore_runtime.h" // _Py_ID()
66

7-
#include <stddef.h>
8-
97
/* We define bool_repr to return "False" or "True" */
108

119
static PyObject *
@@ -155,8 +153,8 @@ bool_dealloc(PyObject* Py_UNUSED(ignore))
155153
PyTypeObject PyBool_Type = {
156154
PyVarObject_HEAD_INIT(&PyType_Type, 0)
157155
"bool",
158-
offsetof(struct _longobject, long_value.ob_digit), /* tp_basicsize */
159-
sizeof(digit), /* tp_itemsize */
156+
sizeof(struct _longobject),
157+
0,
160158
bool_dealloc, /* tp_dealloc */
161159
0, /* tp_vectorcall_offset */
162160
0, /* tp_getattr */

‎Objects/longobject.c‎

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5882,10 +5882,13 @@ static Py_ssize_t
58825882
int___sizeof___impl(PyObject *self)
58835883
/*[clinic end generated code: output=3303f008eaa6a0a5 input=9b51620c76fc4507]*/
58845884
{
5885-
/* using Py_MAX(..., 1) because we always allocate space for at least
5886-
one digit, even though the integer zero has a Py_SIZE of 0 */
5887-
Py_ssize_t ndigits = Py_MAX(Py_ABS(Py_SIZE(self)), 1);
5888-
return Py_TYPE(self)->tp_basicsize + Py_TYPE(self)->tp_itemsize * ndigits;
5885+
Py_ssize_t res;
5886+
5887+
res = offsetof(PyLongObject, long_value.ob_digit)
5888+
/* using Py_MAX(..., 1) because we always allocate space for at least
5889+
one digit, even though the integer zero has a Py_SIZE of 0 */
5890+
+ Py_MAX(Py_ABS(Py_SIZE(self)), 1)*sizeof(digit);
5891+
return res;
58895892
}
58905893

58915894
/*[clinic input]

0 commit comments

Comments
 (0)