Author: Matti Picus <matti.pi...@gmail.com> Branch: buffer-interface2 Changeset: r87114:0497d086d9c5 Date: 2016-09-14 20:24 +0300 http://bitbucket.org/pypy/pypy/changeset/0497d086d9c5/
Log: more tests, fixes for buffer interface on app-level classes diff --git a/pypy/module/cpyext/test/test_abstract.py b/pypy/module/cpyext/test/test_abstract.py --- a/pypy/module/cpyext/test/test_abstract.py +++ b/pypy/module/cpyext/test/test_abstract.py @@ -104,3 +104,17 @@ assert raises(TypeError, buffer_support.readbuffer_as_string, 42) assert raises(TypeError, buffer_support.writebuffer_as_string, 42) assert raises(TypeError, buffer_support.charbuffer_as_string, 42) + + def test_user_class(self): + class MyBuf(str): + pass + s = 'a\0x' + buf = MyBuf(s) + buffer_support = self.get_buffer_support() + + assert buffer_support.check_readbuffer(buf) + assert s == buffer_support.readbuffer_as_string(buf) + assert raises(TypeError, buffer_support.writebuffer_as_string, buf) + assert s == buffer_support.charbuffer_as_string(buf) + + diff --git a/pypy/module/cpyext/typeobject.py b/pypy/module/cpyext/typeobject.py --- a/pypy/module/cpyext/typeobject.py +++ b/pypy/module/cpyext/typeobject.py @@ -514,10 +514,13 @@ @cpython_api([PyObject, Py_ssize_t, rffi.VOIDPP], lltype.Signed, header=None, error=-1) def bf_getreadbuffer(space, w_buf, segment, ref): + from rpython.rlib.buffer import StringBuffer if segment != 0: raise oefmt(space.w_SystemError, "accessing non-existent segment") buf = space.readbuf_w(w_buf) + if isinstance(buf, StringBuffer): + return str_getreadbuffer(space, w_buf, segment, ref) address = buf.get_raw_address() ref[0] = address return len(buf) @@ -533,7 +536,6 @@ if segment != 0: raise oefmt(space.w_SystemError, "accessing non-existent segment") - buf = space.writebuf_w(w_buf) ref[0] = buf.get_raw_address() return len(buf) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit