Author: Matti Picus <[email protected]>
Branch: buffer-interface2
Changeset: r87116:1079c793b219
Date: 2016-09-14 22:12 +0300
http://bitbucket.org/pypy/pypy/changeset/1079c793b219/
Log: add test that passes -A fails untranslated, bf_get* slots are NULL
in subclass
diff --git a/pypy/module/cpyext/test/array.c b/pypy/module/cpyext/test/array.c
--- a/pypy/module/cpyext/test/array.c
+++ b/pypy/module/cpyext/test/array.c
@@ -2394,14 +2394,29 @@
(iternextfunc)arrayiter_next, /* tp_iternext */
0, /* tp_methods */
};
+static PyObject *
+readbuffer_as_string(PyObject *self, PyObject *args)
+{
+ PyObject *obj;
+ const void *ptr;
+ Py_ssize_t size;
+
+ if (!PyArg_ParseTuple(args, "O", &obj)) {
+ return NULL;
+ }
+ if (PyObject_AsReadBuffer(obj, &ptr, &size) < 0)
+ return NULL;
+ return PyString_FromStringAndSize((char*)ptr, size);
+}
+
/*********************** Install Module **************************/
-/* No functions in array module. */
static PyMethodDef a_methods[] = {
{"_reconstruct", (PyCFunction)_reconstruct, METH_VARARGS, NULL},
{"switch_multiply", (PyCFunction)switch_multiply, METH_NOARGS, NULL},
+ {"readbuffer_as_string", (PyCFunction)readbuffer_as_string,
METH_VARARGS, NULL},
{NULL, NULL, 0, NULL} /* Sentinel */
};
diff --git a/pypy/module/cpyext/test/test_arraymodule.py
b/pypy/module/cpyext/test/test_arraymodule.py
--- a/pypy/module/cpyext/test/test_arraymodule.py
+++ b/pypy/module/cpyext/test/test_arraymodule.py
@@ -89,6 +89,7 @@
assert res == [2, 4, 6]
def test_subclass(self):
+ import struct
module = self.import_module(name='array')
class Sub(module.array):
pass
@@ -97,3 +98,5 @@
res = [1, 2, 3] * arr
assert res == [1, 2, 3, 1, 2, 3]
+ val = module.readbuffer_as_string(arr)
+ assert val == struct.pack('i', 2)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit