Author: Raffael Tfirst <raffael.tfi...@gmail.com>
Branch: py3.5-async
Changeset: r85793:10ce7bcfef58
Date: 2016-07-21 20:01 +0200
http://bitbucket.org/pypy/pypy/changeset/10ce7bcfef58/

Log:    Calculate new itemsize for memoryview after cast

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
@@ -197,18 +197,40 @@
         return space.wrap(rffi.cast(lltype.Signed, ptr))
     
     def get_native_fmtchar(self, fmt):
+        from rpython.rtyper.lltypesystem import rffi
+        from sys import getsizeof
         size = -1
-        if fmt[0] == '@':
-            f = fmt[1]
+        if fmt._val(fmt)[0] == '@':
+            f = fmt._val(fmt)[1]
         else:
-            f = fmt[0]
+            f = fmt._val(fmt)[0]
         if f == 'c' or f == 'b' or f == 'B':
-            size = size
+            size = rffi.sizeof(rffi.CHAR)
+        elif f == 'h' or f == 'H':
+            size = rffi.sizeof(rffi.SHORT)
+        elif f == 'i' or f == 'I':
+            size = rffi.sizeof(rffi.INT)
+        elif f == 'l' or f == 'L':
+            size = rffi.sizeof(rffi.LONG)
+        elif f == 'q' or f == 'Q':
+            size = rffi.sizeof(rffi.LONGLONG)
+        elif f == 'n' or f == 'N':
+            size = getsizeof(rffi.r_ssize_t)
+        elif f == 'f':
+            size = rffi.sizeof(rffi.FLOAT)
+        elif f == 'd':
+            size = rffi.sizeof(rffi.DOUBLE)
+        elif f == '?':
+            size = rffi.sizeof(rffi.CHAR)
+        elif f == 'P':
+            size = rffi.sizeof(rffi.VOIDP)
+        return size
     
     def descr_cast(self, space, w_args, **w_kwds):
         self._check_released(space)
-        self.format = w_args
-        return self
+        newitemsize = self.get_native_fmtchar(w_args)
+        mv = W_MemoryView(self.buf, w_args, newitemsize)
+        return mv
 
 
 W_MemoryView.typedef = TypeDef(
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to