Author: Matti Picus <matti.pi...@gmail.com> Branch: buffer-interface2 Changeset: r87517:fe8ec4c389c4 Date: 2016-10-02 14:14 +0300 http://bitbucket.org/pypy/pypy/changeset/fe8ec4c389c4/
Log: up the size of the fixed-size format buffer, try to warn if truncated. Test needed diff --git a/pypy/module/cpyext/include/object.h b/pypy/module/cpyext/include/object.h --- a/pypy/module/cpyext/include/object.h +++ b/pypy/module/cpyext/include/object.h @@ -144,7 +144,7 @@ /* Py3k buffer interface, adapted for PyPy */ #define Py_MAX_NDIMS 32 -#define Py_MAX_FMT 5 +#define Py_MAX_FMT 128 typedef struct bufferinfo { void *buf; PyObject *obj; /* owned reference */ diff --git a/pypy/module/cpyext/memoryobject.py b/pypy/module/cpyext/memoryobject.py --- a/pypy/module/cpyext/memoryobject.py +++ b/pypy/module/cpyext/memoryobject.py @@ -4,6 +4,7 @@ from rpython.rtyper.lltypesystem import lltype, rffi from rpython.rlib.rarithmetic import widen from pypy.objspace.std.memoryobject import W_MemoryView +from pypy.module.cpyext.import_ import PyImport_Import PyMemoryView_Check, PyMemoryView_CheckExact = build_type_checkers("MemoryView", "w_memoryview") @@ -46,8 +47,13 @@ fmt = buf.getformat() n = Py_MAX_FMT - 1 # NULL terminated buffer if len(fmt) > n: - ### WARN? - pass + w_message = space.newbytes("PyPy specific Py_MAX_FMT is %d which is too " + "small for buffer format, %d needed" % ( + Py_MAX_FMT, len(fmt))) + w_stacklevel = space.newint(1) + w_module = PyImport_Import(space, space.newbytes("warnings")) + w_warn = space.getattr(w_module, space.newbytes("warn")) + space.call_function(w_warn, w_message, space.w_None, w_stacklevel) else: n = len(fmt) for i in range(n): diff --git a/pypy/module/cpyext/test/test_memoryobject.py b/pypy/module/cpyext/test/test_memoryobject.py --- a/pypy/module/cpyext/test/test_memoryobject.py +++ b/pypy/module/cpyext/test/test_memoryobject.py @@ -1,8 +1,12 @@ +import pytest + from rpython.rtyper.lltypesystem import rffi from pypy.module.cpyext.test.test_api import BaseApiTest from pypy.module.cpyext.test.test_cpyext import AppTestCpythonExtensionBase from rpython.rlib.buffer import StringBuffer +only_pypy ="config.option.runappdirect and '__pypy__' not in sys.builtin_module_names" + class TestMemoryViewObject(BaseApiTest): def test_fromobject(self, space, api): w_hello = space.newbytes("hello") @@ -41,8 +45,12 @@ viewlen = module.test_buffer(arr) assert viewlen == y.itemsize * len(y) + @pytest.mark.skipif(only_pypy, reason='pypy only test') def test_buffer_info(self): - from _numpypy import multiarray as np + try: + from _numpypy import multiarray as np + except ImportError: + skip('pypy built without _numpypy') module = self.import_module(name='buffer_test') get_buffer_info = module.get_buffer_info raises(ValueError, get_buffer_info, np.arange(5)[::2], ('SIMPLE',)) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit