[Python-checkins] cpython (merge 3.2 -> default): Issue #15489: Add a __sizeof__ implementation for BytesIO objects.
antoine.pitrou
python-checkins at python.org
Mon Jul 30 00:07:15 CEST 2012
http://hg.python.org/cpython/rev/917295aaad76
changeset: 78322:917295aaad76
parent: 78319:1d811e1097ed
parent: 78321:1d3155750808
user: Antoine Pitrou <solipsis at pitrou.net>
date: Mon Jul 30 00:01:44 2012 +0200
summary:
Issue #15489: Add a __sizeof__ implementation for BytesIO objects.
Patch by Serhiy Storchaka.
files:
Lib/test/test_memoryio.py | 11 +++++++++++
Misc/NEWS | 3 +++
Modules/_io/bytesio.c | 12 ++++++++++++
3 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/Lib/test/test_memoryio.py b/Lib/test/test_memoryio.py
--- a/Lib/test/test_memoryio.py
+++ b/Lib/test/test_memoryio.py
@@ -654,6 +654,17 @@
memio.close()
self.assertRaises(ValueError, memio.__setstate__, (b"closed", 0, None))
+ check_sizeof = support.check_sizeof
+
+ @support.cpython_only
+ def test_sizeof(self):
+ basesize = support.calcobjsize('P2PP2PP')
+ check = self.check_sizeof
+ self.assertEqual(object.__sizeof__(io.BytesIO()), basesize)
+ check(io.BytesIO(), basesize )
+ check(io.BytesIO(b'a'), basesize + 1 + 1 )
+ check(io.BytesIO(b'a' * 1000), basesize + 1000 + 1 )
+
class CStringIOTest(PyStringIOTest):
ioclass = io.StringIO
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -334,6 +334,9 @@
Library
-------
+- Issue #15489: Add a __sizeof__ implementation for BytesIO objects.
+ Patch by Serhiy Storchaka.
+
- Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
Patch by Serhiy Storchaka.
diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c
--- a/Modules/_io/bytesio.c
+++ b/Modules/_io/bytesio.c
@@ -834,6 +834,17 @@
return 0;
}
+static PyObject *
+bytesio_sizeof(bytesio *self, void *unused)
+{
+ Py_ssize_t res;
+
+ res = sizeof(bytesio);
+ if (self->buf)
+ res += self->buf_size;
+ return PyLong_FromSsize_t(res);
+}
+
static int
bytesio_traverse(bytesio *self, visitproc visit, void *arg)
{
@@ -876,6 +887,7 @@
{"truncate", (PyCFunction)bytesio_truncate, METH_VARARGS, truncate_doc},
{"__getstate__", (PyCFunction)bytesio_getstate, METH_NOARGS, NULL},
{"__setstate__", (PyCFunction)bytesio_setstate, METH_O, NULL},
+ {"__sizeof__", (PyCFunction)bytesio_sizeof, METH_NOARGS, NULL},
{NULL, NULL} /* sentinel */
};
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list