[pypy-commit] pypy py3.5-memoryview: removed multiply where itemsize is already applied, simplification

plan_rich pypy.commits at gmail.com
Mon Aug 29 10:27:09 EDT 2016


Author: Richard Plangger <planrichi at gmail.com>
Branch: py3.5-memoryview
Changeset: r86701:a011742662bf
Date: 2016-08-29 16:15 +0200
http://bitbucket.org/pypy/pypy/changeset/a011742662bf/

Log:	removed multiply where itemsize is already applied, simplification

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
@@ -225,15 +225,7 @@
         start, stop, step, size = space.decode_index4(w_index, self.getlength())
         # ^^^ for a non-slice index, this returns (index, 0, 0, 1)
         itemsize = self.getitemsize()
-        if itemsize > 1:
-            start *= itemsize
-            size *= itemsize
-            stop  = start + size
-            # XXX why? returns a memory view on int index if step == 0:
-            #    step = 1
-
-            if stop > self.buf.getlength():
-                raise oefmt(space.w_IndexError, 'index out of range')
+        start, stop, size = self._apply_itemsize(space, start, size, itemsize)
         if step == 0:  # index only
             if itemsize == 1:
                 ch = self.buf.getitem(start)
@@ -253,6 +245,16 @@
             raise oefmt(space.w_NotImplementedError,
                         "XXX extended slicing")
 
+    def _apply_itemsize(self, space, start, size, itemsize):
+        if itemsize > 1:
+            start *= itemsize
+            size *= itemsize
+            stop  = start + size
+            # 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')
+        return start, stop, size
+
     def descr_setitem(self, space, w_index, w_obj):
         self._check_released(space)
         if self.buf.readonly:
@@ -261,16 +263,7 @@
             raise oefmt(space.w_NotImplementedError, "")
         start, stop, step, size = space.decode_index4(w_index, self.getlength())
         itemsize = self.getitemsize()
-        if itemsize > 1:
-            start *= itemsize
-            size *= itemsize
-            stop  = start + size
-            # 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')
+        start, stop, size = self._apply_itemsize(space, start, size, itemsize)
         if step == 0:  # index only
             if itemsize == 1:
                 ch = getbytevalue(space, w_obj)
@@ -287,7 +280,7 @@
                 self.buf.setslice(start, fmtiter.result.build())
         elif step == 1:
             value = space.buffer_w(w_obj, space.BUF_CONTIG_RO)
-            if value.getlength() != size * self.itemsize:
+            if value.getlength() != size:
                 raise oefmt(space.w_ValueError,
                             "cannot modify size of memoryview object")
             self.buf.setslice(start, value.as_str())


More information about the pypy-commit mailing list