[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