Author: Manuel Jacob <[email protected]>
Branch: py3.3
Changeset: r76154:4b6673a65c79
Date: 2015-02-26 11:10 +0100
http://bitbucket.org/pypy/pypy/changeset/4b6673a65c79/

Log:    More fixes to memoryview.

diff --git a/lib-python/3/test/test_memoryview.py 
b/lib-python/3/test/test_memoryview.py
--- a/lib-python/3/test/test_memoryview.py
+++ b/lib-python/3/test/test_memoryview.py
@@ -11,6 +11,7 @@
 import weakref
 import array
 import io
+from test.support import check_impl_detail
 
 
 try:
@@ -110,10 +111,11 @@
         self.assertRaises(IndexError, setitem, -sys.maxsize, b"a")
         # Wrong index/slice types
         self.assertRaises(TypeError, setitem, 0.0, b"a")
-        self.assertRaises(TypeError, setitem, (0,), b"a")
-        self.assertRaises(TypeError, setitem, (slice(0,1,1), 0), b"a")
-        self.assertRaises(TypeError, setitem, (0, slice(0,1,1)), b"a")
-        self.assertRaises(TypeError, setitem, (0,), b"a")
+        if check_impl_detail():
+            self.assertRaises(TypeError, setitem, (0,), b"a")
+            self.assertRaises(TypeError, setitem, (slice(0,1,1), 0), b"a")
+            self.assertRaises(TypeError, setitem, (0, slice(0,1,1)), b"a")
+            self.assertRaises(TypeError, setitem, (0,), b"a")
         self.assertRaises(TypeError, setitem, "a", b"a")
         # Not implemented: multidimensional slices
         slices = (slice(0,1,1), slice(0,1,2))
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
@@ -5,6 +5,7 @@
 
 from rpython.rlib.buffer import Buffer, SubBuffer
 from rpython.rlib.objectmodel import compute_hash
+from rpython.rlib.rstruct.error import StructError
 from pypy.interpreter.baseobjspace import W_Root
 from pypy.interpreter.error import OperationError, oefmt
 from pypy.interpreter.gateway import interp2app
@@ -98,11 +99,18 @@
         self._check_released(space)
         if self.buf.readonly:
             raise oefmt(space.w_TypeError, "cannot modify read-only memory")
+        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())
         if step == 0:  # index only
             # TODO: this probably isn't very fast
             fmtiter = PackFormatIterator(space, [w_obj], self.itemsize)
-            fmtiter.interpret(self.format)
+            try:
+                fmtiter.interpret(self.format)
+            except StructError as e:
+                raise oefmt(space.w_TypeError,
+                            "memoryview: invalid type for format '%s'",
+                            self.format)
             self.buf.setslice(start * self.itemsize, fmtiter.result.build())
         elif step == 1:
             value = space.buffer_w(w_obj, space.BUF_CONTIG_RO)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to