Author: Armin Rigo <ar...@tunes.org> Branch: ffi-backend Changeset: r55969:ec27cf4e431c Date: 2012-07-07 17:48 +0200 http://bitbucket.org/pypy/pypy/changeset/ec27cf4e431c/
Log: Test and fix diff --git a/pypy/module/_cffi_backend/cbuffer.py b/pypy/module/_cffi_backend/cbuffer.py --- a/pypy/module/_cffi_backend/cbuffer.py +++ b/pypy/module/_cffi_backend/cbuffer.py @@ -2,7 +2,7 @@ from pypy.interpreter.buffer import RWBuffer from pypy.interpreter.gateway import unwrap_spec from pypy.rpython.lltypesystem import rffi -from pypy.module._cffi_backend import cdataobj, ctypeptr +from pypy.module._cffi_backend import cdataobj, ctypeptr, ctypearray class LLBuffer(RWBuffer): @@ -36,14 +36,19 @@ @unwrap_spec(cdata=cdataobj.W_CData, size=int) def buffer(space, cdata, size=-1): - if not isinstance(cdata.ctype, ctypeptr.W_CTypePtrOrArray): + ctype = cdata.ctype + if isinstance(ctype, ctypeptr.W_CTypePointer): + if size < 0: + size = ctype.ctitem.size + elif isinstance(ctype, ctypearray.W_CTypeArray): + if size < 0: + size = cdata._sizeof() + else: raise operationerrfmt(space.w_TypeError, "expected a pointer or array cdata, got '%s'", - cdata.ctype.name) + ctype.name) if size < 0: - size = cdata._sizeof() - if size < 0: - raise operationerrfmt(space.w_TypeError, - "don't know the size pointed to by '%s'", - cdata.ctype.name) + raise operationerrfmt(space.w_TypeError, + "don't know the size pointed to by '%s'", + ctype.name) return space.wrap(LLBuffer(cdata._cdata, size)) diff --git a/pypy/module/_cffi_backend/test/_backend_test_c.py b/pypy/module/_cffi_backend/test/_backend_test_c.py --- a/pypy/module/_cffi_backend/test/_backend_test_c.py +++ b/pypy/module/_cffi_backend/test/_backend_test_c.py @@ -1348,6 +1348,12 @@ assert (p < s) ^ (p > s) def test_buffer(): + BShort = new_primitive_type("short") + s = newp(new_pointer_type(BShort), 100) + assert sizeof(s) == size_of_ptr() + assert sizeof(BShort) == 2 + assert len(str(buffer(s))) == 2 + # BChar = new_primitive_type("char") BCharArray = new_array_type(new_pointer_type(BChar), None) c = newp(BCharArray, "hi there") _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit