[pypy-commit] pypy py3.3: More fixes to memoryview.
mjacob
noreply at buildbot.pypy.org
Thu Feb 26 11:11:33 CET 2015
Author: Manuel Jacob <me at manueljacob.de>
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)
More information about the pypy-commit
mailing list