[pypy-commit] pypy py3.5-memoryview: making all memoryobject tests pass. resolve several issues in get/setitem

plan_rich pypy.commits at gmail.com
Sat Aug 27 02:56:49 EDT 2016


Author: Richard Plangger <planrichi at gmail.com>
Branch: py3.5-memoryview
Changeset: r86589:72bfb3417856
Date: 2016-08-27 08:56 +0200
http://bitbucket.org/pypy/pypy/changeset/72bfb3417856/

Log:	making all memoryobject tests pass. resolve several issues in
	get/setitem

diff --git a/pypy/objspace/std/bytearrayobject.py b/pypy/objspace/std/bytearrayobject.py
--- a/pypy/objspace/std/bytearrayobject.py
+++ b/pypy/objspace/std/bytearrayobject.py
@@ -496,7 +496,7 @@
     return data
 
 HEXDIGITS = "0123456789abcdef"
-PY_SIZE_T_MAX = intmask(2**(rffi.sizeof(rffi.SIZE_T)*8)-1)
+PY_SIZE_T_MAX = intmask(2**(rffi.sizeof(rffi.SIZE_T)*8-1)-1)
 
 @specialize.arg(3) # raw access
 def _array_to_hexstring(space, buf, len=0, rawaccess=False):
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
@@ -48,7 +48,7 @@
     def buffer_w_ex(self, space, flags):
         self._check_released(space)
         space.check_buf_flags(flags, self.buf.readonly)
-        return self.buf, self.get_format(), self.itemsize
+        return self.buf, self.getformat(), self.itemsize
 
     @staticmethod
     def descr_new_memoryview(space, w_subtype, w_object):
@@ -157,16 +157,17 @@
         if space.isinstance_w(w_index, space.w_tuple):
             return self._getitem_tuple_indexed(space, w_index)
 
-        start, stop, step, size = space.decode_index4_or_tuple_index(w_index, \
-                                                              self.getlength())
-        itemsize = self.buf.getitemsize()
+        start, stop, step, size = space.decode_index4(w_index, self.getlength())
+        itemsize = self.itemsize
         if itemsize > 1:
             start *= itemsize
             size *= itemsize
             stop  = start + size
-            if step == 0:
-                step = 1
-            if stop > self.getlength():
+            # XXX why? returns a memory view on int index if step == 0:
+            #    step = 1
+
+            # start & stop are now byte offset, thus use self.bug.getlength()
+            if stop > self.buf.getlength():
                 raise oefmt(space.w_IndexError, 'index out of range')
         if step not in (0, 1):
             raise oefmt(space.w_NotImplementedError, "")
@@ -190,21 +191,19 @@
         if space.isinstance_w(w_index, space.w_tuple):
             raise oefmt(space.w_NotImplementedError, "")
         start, stop, step, size = space.decode_index4(w_index, self.getlength())
-        itemsize = self.buf.getitemsize()
+        itemsize = self.itemsize
         if itemsize > 1:
             start *= itemsize
             size *= itemsize
             stop  = start + size
-            if step == 0:
-                step = 1
-            if stop > self.getlength():
+            # XXX why? returns a memory view on int index if step == 0:
+            #    step = 1
+
+            # start & stop are now byte offset, thus use self.bug.getlength()
+            if stop > self.buf.getlength():
                 raise oefmt(space.w_IndexError, 'index out of range')
         if step not in (0, 1):
             raise oefmt(space.w_NotImplementedError, "")
-        value = space.buffer_w(w_obj, space.BUF_CONTIG_RO)
-        if value.getlength() != size:
-            raise oefmt(space.w_ValueError,
-                        "cannot modify size of memoryview object")
         if step == 0:  # index only
             # TODO: this probably isn't very fast
             fmtiter = PackFormatIterator(space, [w_obj], self.itemsize)
@@ -226,7 +225,7 @@
 
     def descr_len(self, space):
         self._check_released(space)
-        return space.wrap(self.buf.getlength())
+        return space.wrap(self.getlength())
 
     def w_get_format(self, space):
         self._check_released(space)
@@ -234,7 +233,7 @@
 
     def w_get_itemsize(self, space):
         self._check_released(space)
-        return space.wrap(self.buf.getitemsize())
+        return space.wrap(self.itemsize)
 
     def w_get_ndim(self, space):
         self._check_released(space)
@@ -426,7 +425,7 @@
         self.setformat(newfmt)
         self.itemsize = itemsize
         self.ndim = 1
-        self.shape = [buf.getlength() / buf.getitemsize()]
+        self.shape = [buf.getlength() // buf.getitemsize()]
         self.srides = [buf.getitemsize()]
         # XX suboffsets
 
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
@@ -266,7 +266,7 @@
 from pypy.objspace.std.transparent import register_proxyable
 from pypy.conftest import option
 
-class AppTestMemoryViewMicroNumPyPy(object):
+class AppTestMemoryViewMockBuffer(object):
     spaceconfig = dict(usemodules=[])
     def setup_class(cls):
         if option.runappdirect:


More information about the pypy-commit mailing list