[pypy-commit] pypy buffer-interface2: test, fix for translation - buf will always be a rlib.buffer Buffer

mattip pypy.commits at gmail.com
Thu Oct 6 00:39:50 EDT 2016


Author: Matti Picus <matti.picus at 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):


More information about the pypy-commit mailing list