Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r1668:47d41a504ce6 Date: 2015-03-13 09:43 +0100 http://bitbucket.org/cffi/cffi/changeset/47d41a504ce6/
Log: Support for Python 3 too diff --git a/c/_cffi_backend.c b/c/_cffi_backend.c --- a/c/_cffi_backend.c +++ b/c/_cffi_backend.c @@ -5178,6 +5178,7 @@ static int invalid_input_buffer_type(PyObject *x) { +#if PY_MAJOR_VERSION < 3 if (PyBuffer_Check(x)) { /* XXX fish fish fish in an inofficial way */ typedef struct { @@ -5190,11 +5191,17 @@ if (x == NULL) return 0; } - else if (PyMemoryView_Check(x)) { + else +#endif +#if PY_MAJOR_VERSION > 2 || PY_MINOR_VERSION > 6 + if (PyMemoryView_Check(x)) { x = PyMemoryView_GET_BASE(x); if (x == NULL) return 0; } + else +#endif + ; if (PyBytes_Check(x) || PyUnicode_Check(x)) return 1; @@ -5470,6 +5477,7 @@ return PyLong_FromVoidPtr(f); } +#if PY_MAJOR_VERSION < 3 static Py_ssize_t _test_segcountproc(PyObject *o, Py_ssize_t *ignored) { return 1; @@ -5492,6 +5500,7 @@ *r = buf; return 3; } +#endif static int _test_getbuf(PyObject *self, Py_buffer *view, int flags) { static char buf[] = "GTB"; @@ -5514,12 +5523,14 @@ assert(obj->tp_as_buffer != NULL); +#if PY_MAJOR_VERSION < 3 obj->tp_as_buffer->bf_getsegcount = &_test_segcountproc; obj->tp_flags |= Py_TPFLAGS_HAVE_GETCHARBUFFER; obj->tp_flags |= Py_TPFLAGS_HAVE_NEWBUFFER; if (methods & 1) obj->tp_as_buffer->bf_getreadbuffer = &_test_getreadbuf; if (methods & 2) obj->tp_as_buffer->bf_getwritebuffer = &_test_getwritebuf; if (methods & 4) obj->tp_as_buffer->bf_getcharbuffer = &_test_getcharbuf; +#endif if (methods & 8) obj->tp_as_buffer->bf_getbuffer = &_test_getbuf; if (methods & 16) obj->tp_as_buffer->bf_getbuffer = &_test_getbuf_ro; diff --git a/c/test_c.py b/c/test_c.py --- a/c/test_c.py +++ b/c/test_c.py @@ -3259,18 +3259,29 @@ assert list(a) == [10000, 20500, 30000] def test_from_buffer_not_str_unicode_bytearray(): - from __builtin__ import buffer BChar = new_primitive_type("char") BCharP = new_pointer_type(BChar) BCharA = new_array_type(BCharP, None) py.test.raises(TypeError, from_buffer, BCharA, b"foo") py.test.raises(TypeError, from_buffer, BCharA, u"foo") py.test.raises(TypeError, from_buffer, BCharA, bytearray(b"foo")) - py.test.raises(TypeError, from_buffer, BCharA, buffer(b"foo")) - py.test.raises(TypeError, from_buffer, BCharA, buffer(u"foo")) - py.test.raises(TypeError, from_buffer, BCharA, buffer(bytearray(b"foo"))) - py.test.raises(TypeError, from_buffer, BCharA, memoryview(b"foo")) - py.test.raises(TypeError, from_buffer, BCharA, memoryview(bytearray(b"fo"))) + try: + from __builtin__ import buffer + except ImportError: + pass + else: + py.test.raises(TypeError, from_buffer, BCharA, buffer(b"foo")) + py.test.raises(TypeError, from_buffer, BCharA, buffer(u"foo")) + py.test.raises(TypeError, from_buffer, BCharA, + buffer(bytearray(b"foo"))) + try: + from __builtin__ import memoryview + except ImportError: + pass + else: + py.test.raises(TypeError, from_buffer, BCharA, memoryview(b"foo")) + py.test.raises(TypeError, from_buffer, BCharA, + memoryview(bytearray(b"foo"))) def test_from_buffer_more_cases(): try: @@ -3284,27 +3295,34 @@ def check1(bufobj, expected): c = from_buffer(BCharA, bufobj) assert typeof(c) is BCharA + if sys.version_info >= (3,): + expected = [bytes(c, "ascii") for c in expected] assert list(c) == list(expected) # - def check(methods, expected, expeted_for_memoryview=None): - from __builtin__ import buffer, memoryview + def check(methods, expected, expected_for_memoryview=None): + if sys.version_info >= (3,): + if methods <= 7: + return + if expected_for_memoryview is not None: + expected = expected_for_memoryview class X(object): pass _testbuff(X, methods) bufobj = X() check1(bufobj, expected) try: + from __builtin__ import buffer bufobjb = buffer(bufobj) - except TypeError: + except (TypeError, ImportError): pass else: check1(bufobjb, expected) try: bufobjm = memoryview(bufobj) - except TypeError: + except (TypeError, NameError): pass else: - check1(bufobjm, expeted_for_memoryview or expected) + check1(bufobjm, expected_for_memoryview or expected) # check(1, "RDB") check(2, "WRB") @@ -3312,14 +3330,14 @@ check(8, "GTB") check(16, "ROB") # - check(1 | 2, "RDB") - check(1 | 4, "RDB") - check(2 | 4, "CHB") - check(1 | 8, "RDB", "GTB") + check(1 | 2, "RDB") + check(1 | 4, "RDB") + check(2 | 4, "CHB") + check(1 | 8, "RDB", "GTB") check(1 | 16, "RDB", "ROB") - check(2 | 8, "WRB", "GTB") + check(2 | 8, "WRB", "GTB") check(2 | 16, "WRB", "ROB") - check(4 | 8, "CHB", "GTB") + check(4 | 8, "CHB", "GTB") check(4 | 16, "CHB", "ROB") def test_version(): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit