[pypy-commit] pypy py3k-memoryview: Fix.

Manuel Jacob noreply at buildbot.pypy.org
Mon May 19 01:12:23 CEST 2014


Author: Manuel Jacob
Branch: py3k-memoryview
Changeset: r71572:b90dbe86a285
Date: 2014-05-19 01:11 +0200
http://bitbucket.org/pypy/pypy/changeset/b90dbe86a285/

Log:	Fix.

diff --git a/pypy/module/array/interp_array.py b/pypy/module/array/interp_array.py
--- a/pypy/module/array/interp_array.py
+++ b/pypy/module/array/interp_array.py
@@ -637,16 +637,14 @@
         self.readonly = readonly
 
     def getlength(self):
-        return self.array.len
+        return self.array.len * self.itemsize
 
     def getitem(self, index):
-        resbuf = ['\x00'] * self.itemsize
         array = self.array
         data = array._charbuf_start()
-        for i in xrange(self.itemsize):
-            resbuf[i] = data[index + i]
+        char = data[index]
         array._charbuf_stop()
-        return ''.join(resbuf)
+        return char
 
     def setitem(self, index, char):
         array = self.array
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
@@ -73,11 +73,11 @@
 
     def as_str(self):
         buf = self.buf
-        n_bytes = buf.getlength() * buf.itemsize
+        n_bytes = buf.getlength()
         return buf.getslice(0, n_bytes, 1, n_bytes)
 
     def getlength(self):
-        return self.buf.getlength()
+        return self.buf.getlength() // self.buf.itemsize
 
     def getslice(self, start, stop):
         if start < 0:
@@ -109,7 +109,10 @@
         if step not in (0, 1):
             raise OperationError(space.w_NotImplementedError, space.wrap(""))
         if step == 0:  # index only
-            return space.wrapbytes(self.buf.getitem(start))
+            a = start * self.buf.itemsize
+            b = a + self.buf.itemsize
+            return space.wrapbytes(
+                ''.join([self.buf.getitem(i) for i in range(a, b)]))
         res = self.getslice(start, stop)
         return space.wrap(res)
 


More information about the pypy-commit mailing list