Author: Matti Picus <matti.pi...@gmail.com> Branch: buffer-interface2 Changeset: r87610:4921d1e337bf Date: 2016-10-06 07:38 +0300 http://bitbucket.org/pypy/pypy/changeset/4921d1e337bf/
Log: test, fix for translation - buf will always be a rlib.buffer Buffer 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 @@ -626,17 +626,14 @@ args = Arguments(space, [space.newint(flags)]) w_obj = space.call_args(space.get(buff_fn, w_self), args) if view: - #from PyObject_GetBuffer + #like PyObject_GetBuffer flags = widen(flags) buf = space.buffer_w(w_obj, flags) try: view.c_buf = rffi.cast(rffi.VOIDP, buf.get_raw_address()) view.c_obj = make_ref(space, w_obj) except ValueError: - if hasattr(buf, 'as_str'): - w_s = space.newbytes(buf.as_str()) - else: - w_s = w_obj.descr_tobytes(space) + w_s = space.newbytes(buf.as_str()) view.c_obj = make_ref(space, w_s) view.c_buf = rffi.cast(rffi.VOIDP, rffi.str2charp( space.str_w(w_s), track_allocation=False)) diff --git a/pypy/module/cpyext/test/test_getargs.py b/pypy/module/cpyext/test/test_getargs.py --- a/pypy/module/cpyext/test/test_getargs.py +++ b/pypy/module/cpyext/test/test_getargs.py @@ -139,6 +139,12 @@ return result; ''') assert 'foo\0bar\0baz' == pybuffer(buffer('foo\0bar\0baz')) + import sys + if '__pypy__' not in sys.builtin_module_names: + class A(object): + def __buffer__(self, flags): + return buffer('123') + assert pybuffer(A()) == '123' def test_pyarg_parse_string_fails(self): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit