Author: Armin Rigo <ar...@tunes.org> Branch: py3.5 Changeset: r90069:ffcc62f39db7 Date: 2017-02-12 10:40 +0100 http://bitbucket.org/pypy/pypy/changeset/ffcc62f39db7/
Log: merge heads diff --git a/pypy/module/cpyext/longobject.py b/pypy/module/cpyext/longobject.py --- a/pypy/module/cpyext/longobject.py +++ b/pypy/module/cpyext/longobject.py @@ -70,9 +70,9 @@ @cpython_api([PyObject], lltype.Signed, error=-1) def PyLong_AsLong(space, w_long): """ - Return a C long representation of the contents of pylong. If - pylong is greater than LONG_MAX, an OverflowError is raised - and -1 will be returned.""" + Get a C long int from an int object or any object that has an __int__ + method. Return -1 and set an error if overflow occurs. + """ return space.int_w(space.int(w_long)) @cpython_api([PyObject], Py_ssize_t, error=-1) diff --git a/pypy/module/cpyext/slotdefs.py b/pypy/module/cpyext/slotdefs.py --- a/pypy/module/cpyext/slotdefs.py +++ b/pypy/module/cpyext/slotdefs.py @@ -323,11 +323,11 @@ self.w_obj = w_obj # kept alive self.pyobj = make_ref(space, w_obj) self.format = format - if not shape: + if shape is None: self.shape = [size] else: self.shape = shape - if not strides: + if strides is None: self.strides = [1] else: self.strides = strides diff --git a/pypy/module/cpyext/test/test_arraymodule.py b/pypy/module/cpyext/test/test_arraymodule.py --- a/pypy/module/cpyext/test/test_arraymodule.py +++ b/pypy/module/cpyext/test/test_arraymodule.py @@ -69,6 +69,14 @@ b'\x03\0\0\0' b'\x04\0\0\0') + def test_0d_view(self): + module = self.import_module(name='array') + arr = module.array('B', b'\0\0\0\x01') + buf = memoryview(arr).cast('i', shape=()) + assert bytes(buf) == b'\0\0\0\x01' + assert buf.shape == () + assert buf.strides == () + def test_binop_mul_impl(self): # check that rmul is called module = self.import_module(name='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 @@ -117,6 +117,9 @@ return ''.join(self.copy_buffer()) def copy_buffer(self): + if self.getndim() == 0: + itemsize = self.getitemsize() + return [self.buf.getslice(0, itemsize, 1, itemsize)] data = [] self._copy_rec(0, data, 0) return data @@ -126,12 +129,12 @@ shape = shapes[idim] strides = self.getstrides() - if self.getndim()-1 == idim: - self._copy_base(data,off) + if self.getndim() - 1 == idim: + self._copy_base(data, off) return for i in range(shape): - self._copy_rec(idim+1,data,off) + self._copy_rec(idim + 1, data, off) off += strides[idim] def _copy_base(self, data, off): @@ -428,14 +431,10 @@ def w_get_shape(self, space): self._check_released(space) - if self.getndim() == 0: - return space.w_None return space.newtuple([space.wrap(x) for x in self.getshape()]) def w_get_strides(self, space): self._check_released(space) - if self.getndim() == 0: - return space.w_None return space.newtuple([space.wrap(x) for x in self.getstrides()]) def w_get_suboffsets(self, space): @@ -569,7 +568,7 @@ def _init_flags(self): buf = self.buf - ndim = buf.getndim() + ndim = self.getndim() flags = 0 if ndim == 0: flags |= MEMORYVIEW_SCALAR | MEMORYVIEW_C | MEMORYVIEW_FORTRAN diff --git a/pypy/objspace/std/test/test_memoryobject.py b/pypy/objspace/std/test/test_memoryobject.py --- a/pypy/objspace/std/test/test_memoryobject.py +++ b/pypy/objspace/std/test/test_memoryobject.py @@ -27,6 +27,14 @@ assert len(w) == 2 exc = raises(TypeError, "memoryview('foobar')") + def test_0d(self): + v = memoryview(b'x').cast('B', ()) + assert len(v) == 1 + assert v.shape == () + assert v.strides == () + assert v.tobytes() == b'x' + #assert v[()] == b'x'[0] + def test_rw(self): data = bytearray(b'abcefg') v = memoryview(data) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit