Author: Amaury Forgeot d'Arc <[email protected]>
Branch:
Changeset: r75867:7063d1a5121f
Date: 2015-02-14 13:11 +0100
http://bitbucket.org/pypy/pypy/changeset/7063d1a5121f/
Log: Add buffer._pypy_raw_address to memoryview as well. This will help
python3...
diff --git a/pypy/module/_rawffi/test/test__rawffi.py
b/pypy/module/_rawffi/test/test__rawffi.py
--- a/pypy/module/_rawffi/test/test__rawffi.py
+++ b/pypy/module/_rawffi/test/test__rawffi.py
@@ -1153,6 +1153,11 @@
assert buffer(s)._pypy_raw_address() == addr
assert buffer(s, 10)._pypy_raw_address() == addr + 10
+ addr = memoryview(s)._pypy_raw_address()
+ assert type(addr) is int
+ assert memoryview(s)._pypy_raw_address() == addr
+ assert memoryview(s)[10:]._pypy_raw_address() == addr + 10
+
def test_union(self):
import _rawffi
longsize = _rawffi.sizeof('l')
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
@@ -121,6 +121,17 @@
# I've never seen anyone filling this field
return space.w_None
+ def descr_pypy_raw_address(self, space):
+ from rpython.rtyper.lltypesystem import lltype, rffi
+ try:
+ ptr = self.buf.get_raw_address()
+ except ValueError:
+ # report the error using the RPython-level internal repr of
self.buf
+ msg = ("cannot find the underlying address of buffer that "
+ "is internally %r" % (self.buf,))
+ raise OperationError(space.w_ValueError, space.wrap(msg))
+ return space.wrap(rffi.cast(lltype.Signed, ptr))
+
W_MemoryView.typedef = TypeDef(
"memoryview",
__doc__ = """\
@@ -145,5 +156,6 @@
shape = GetSetProperty(W_MemoryView.w_get_shape),
strides = GetSetProperty(W_MemoryView.w_get_strides),
suboffsets = GetSetProperty(W_MemoryView.w_get_suboffsets),
+ _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
@@ -54,3 +54,8 @@
assert memoryview("abc") != u"abc"
assert not u"abc" == memoryview("abc")
assert u"abc" != memoryview("abc")
+
+ def test_pypy_raw_address_base(self):
+ raises(ValueError, memoryview("foobar")._pypy_raw_address)
+ e = raises(ValueError,
memoryview(bytearray("foobar"))._pypy_raw_address)
+ assert 'BytearrayBuffer' in str(e.value)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit