[pypy-commit] pypy py3.6: add memoryview.obj which stores a reference, issue #3016
mattip
pypy.commits at gmail.com
Sun May 19 04:46:33 EDT 2019
Author: Matti Picus <matti.picus at gmail.com>
Branch: py3.6
Changeset: r96632:40df81b2d706
Date: 2019-05-19 11:45 +0300
http://bitbucket.org/pypy/pypy/changeset/40df81b2d706/
Log: add memoryview.obj which stores a reference, issue #3016
diff --git a/pypy/objspace/std/memoryobject.py b/pypy/objspace/std/memoryobject.py
--- a/pypy/objspace/std/memoryobject.py
+++ b/pypy/objspace/std/memoryobject.py
@@ -57,7 +57,9 @@
w_object._check_released(space)
return W_MemoryView.copy(w_object)
view = space.buffer_w(w_object, space.BUF_FULL_RO)
- return view.wrap(space)
+ mv = view.wrap(space)
+ mv.obj = w_object
+ return mv
def _make_descr__cmp(name):
def descr__cmp(self, space, w_other):
@@ -265,6 +267,10 @@
# I've never seen anyone filling this field
return space.newtuple([])
+ def w_get_obj(self, space):
+ self._check_released(space)
+ return self.obj
+
def descr_repr(self, space):
if self.view is None:
return self.getrepr(space, 'released memory')
@@ -529,6 +535,7 @@
shape = GetSetProperty(W_MemoryView.w_get_shape),
strides = GetSetProperty(W_MemoryView.w_get_strides),
suboffsets = GetSetProperty(W_MemoryView.w_get_suboffsets),
+ obj = GetSetProperty(W_MemoryView.w_get_obj),
_pypy_raw_address = interp2app(W_MemoryView.descr_pypy_raw_address),
)
W_MemoryView.typedef.acceptable_as_base_class = False
diff --git a/pypy/objspace/std/test/test_memoryobject.py b/pypy/objspace/std/test/test_memoryobject.py
--- a/pypy/objspace/std/test/test_memoryobject.py
+++ b/pypy/objspace/std/test/test_memoryobject.py
@@ -62,13 +62,15 @@
assert w.tobytes() == bytes(w) == b'geb'
def test_memoryview_attrs(self):
- v = memoryview(b"a"*100)
+ b = b"a"*100
+ v = memoryview(b)
assert v.format == "B"
assert v.itemsize == 1
assert v.shape == (100,)
assert v.ndim == 1
assert v.strides == (1,)
assert v.nbytes == 100
+ assert v.obj is b
def test_suboffsets(self):
v = memoryview(b"a"*100)
More information about the pypy-commit
mailing list