Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
75ef343e
Commit
75ef343e
authored
Mar 10, 2015
by
Antoine Pitrou
Browse files
Options
Browse Files
Download
Plain Diff
Issue #23629: Fix the default __sizeof__ implementation for variable-sized objects.
parents
f9d263c3
7bc1ecaa
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
22 additions
and
52 deletions
+22
-52
Lib/test/test_buffer.py
Lib/test/test_buffer.py
+15
-0
Lib/test/test_sys.py
Lib/test/test_sys.py
+3
-2
Misc/NEWS
Misc/NEWS
+3
-0
Objects/bytesobject.c
Objects/bytesobject.c
+0
-37
Objects/tupleobject.c
Objects/tupleobject.c
+0
-12
Objects/typeobject.c
Objects/typeobject.c
+1
-1
No files found.
Lib/test/test_buffer.py
View file @
75ef343e
...
...
@@ -2462,6 +2462,21 @@ class TestBufferProtocol(unittest.TestCase):
self
.
assertEqual
(
m
.
tobytes
(),
b''
)
self
.
assertEqual
(
m
.
tolist
(),
[])
check_sizeof
=
support
.
check_sizeof
def
test_memoryview_sizeof
(
self
):
check
=
self
.
check_sizeof
vsize
=
support
.
calcvobjsize
base_struct
=
'Pnin 2P2n2i5P P'
per_dim
=
'3n'
items
=
list
(
range
(
8
))
check
(
memoryview
(
b''
),
vsize
(
base_struct
+
1
*
per_dim
))
a
=
ndarray
(
items
,
shape
=
[
2
,
4
],
format
=
"b"
)
check
(
memoryview
(
a
),
vsize
(
base_struct
+
2
*
per_dim
))
a
=
ndarray
(
items
,
shape
=
[
2
,
2
,
2
],
format
=
"b"
)
check
(
memoryview
(
a
),
vsize
(
base_struct
+
3
*
per_dim
))
def
test_memoryview_struct_module
(
self
):
class
INT
(
object
):
...
...
Lib/test/test_sys.py
View file @
75ef343e
...
...
@@ -846,6 +846,9 @@ class SizeofTest(unittest.TestCase):
check
(
x
,
vsize
(
'n2Pi'
)
+
x
.
__alloc__
())
# bytearray_iterator
check
(
iter
(
bytearray
()),
size
(
'nP'
))
# bytes
check
(
b''
,
vsize
(
'n'
)
+
1
)
check
(
b'x'
*
10
,
vsize
(
'n'
)
+
11
)
# cell
def
get_cell
():
x
=
42
...
...
@@ -965,8 +968,6 @@ class SizeofTest(unittest.TestCase):
check
(
int
(
PyLong_BASE
),
vsize
(
''
)
+
2
*
self
.
longdigit
)
check
(
int
(
PyLong_BASE
**
2
-
1
),
vsize
(
''
)
+
2
*
self
.
longdigit
)
check
(
int
(
PyLong_BASE
**
2
),
vsize
(
''
)
+
3
*
self
.
longdigit
)
# memoryview
check
(
memoryview
(
b''
),
size
(
'Pnin 2P2n2i5P Pn'
))
# module
check
(
unittest
,
size
(
'PnPPP'
))
# None
...
...
Misc/NEWS
View file @
75ef343e
...
...
@@ -10,6 +10,9 @@ Release date: 2015-03-28
Core and Builtins
-----------------
- Issue #23629: Fix the default __sizeof__ implementation for variable-sized
objects.
Library
-------
...
...
Objects/bytesobject.c
View file @
75ef343e
...
...
@@ -3463,42 +3463,6 @@ bytes_fromhex_impl(PyTypeObject *type, PyObject *string)
return
NULL
;
}
/*[clinic input]
bytes.__sizeof__ as bytes_sizeof
self: self(type="PyBytesObject *")
Returns the size of the bytes object in memory, in bytes.
[clinic start generated code]*/
PyDoc_STRVAR
(
bytes_sizeof__doc__
,
"__sizeof__($self, /)
\n
"
"--
\n
"
"
\n
"
"Returns the size of the bytes object in memory, in bytes."
);
#define BYTES_SIZEOF_METHODDEF \
{"__sizeof__", (PyCFunction)bytes_sizeof, METH_NOARGS, bytes_sizeof__doc__},
static
PyObject
*
bytes_sizeof_impl
(
PyBytesObject
*
self
);
static
PyObject
*
bytes_sizeof
(
PyBytesObject
*
self
,
PyObject
*
Py_UNUSED
(
ignored
))
{
return
bytes_sizeof_impl
(
self
);
}
static
PyObject
*
bytes_sizeof_impl
(
PyBytesObject
*
self
)
/*[clinic end generated code: output=44933279343f24ae input=bee4c64bb42078ed]*/
{
Py_ssize_t
res
;
res
=
PyBytesObject_SIZE
+
Py_SIZE
(
self
)
*
Py_TYPE
(
self
)
->
tp_itemsize
;
return
PyLong_FromSsize_t
(
res
);
}
static
PyObject
*
bytes_getnewargs
(
PyBytesObject
*
v
)
{
...
...
@@ -3559,7 +3523,6 @@ bytes_methods[] = {
BYTES_TRANSLATE_METHODDEF
{
"upper"
,
(
PyCFunction
)
stringlib_upper
,
METH_NOARGS
,
_Py_upper__doc__
},
{
"zfill"
,
(
PyCFunction
)
stringlib_zfill
,
METH_VARARGS
,
zfill__doc__
},
BYTES_SIZEOF_METHODDEF
{
NULL
,
NULL
}
/* sentinel */
};
...
...
Objects/tupleobject.c
View file @
75ef343e
...
...
@@ -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 */
...
...
Objects/typeobject.c
View file @
75ef343e
...
...
@@ -4276,7 +4276,7 @@ object_sizeof(PyObject *self, PyObject *args)
res
=
0
;
isize
=
self
->
ob_type
->
tp_itemsize
;
if
(
isize
>
0
)
res
=
Py_SIZE
(
self
->
ob_type
)
*
isize
;
res
=
Py_SIZE
(
self
)
*
isize
;
res
+=
self
->
ob_type
->
tp_basicsize
;
return
PyLong_FromSsize_t
(
res
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment