[pypy-commit] pypy default: update to cffi/17c94f9cb463

arigo pypy.commits at gmail.com
Mon Apr 16 11:46:34 EDT 2018


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r94351:3f46c49c65fa
Date: 2018-04-16 17:45 +0200
http://bitbucket.org/pypy/pypy/changeset/3f46c49c65fa/

Log:	update to cffi/17c94f9cb463

diff --git a/pypy/module/_cffi_backend/ctypearray.py b/pypy/module/_cffi_backend/ctypearray.py
--- a/pypy/module/_cffi_backend/ctypearray.py
+++ b/pypy/module/_cffi_backend/ctypearray.py
@@ -70,7 +70,15 @@
                 length = wchar_helper.unicode_size_as_char32(u)
             return (w_value, length + 1)
         else:
-            explicitlength = space.getindex_w(w_value, space.w_OverflowError)
+            try:
+                explicitlength = space.getindex_w(w_value,
+                                                  space.w_OverflowError)
+            except OperationError as e:
+                if e.match(space, space.w_TypeError):
+                    raise oefmt(space.w_TypeError,
+                        "expected new array length or list/tuple/str, "
+                        "not %T", w_value)
+                raise
             if explicitlength < 0:
                 raise oefmt(space.w_ValueError, "negative array length")
             return (space.w_None, explicitlength)
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
@@ -278,6 +278,9 @@
     assert repr(q).startswith("<cdata 'int *' 0x")
     assert p == q
     assert hash(p) == hash(q)
+    e = py.test.raises(TypeError, newp, new_array_type(BPtr, None), None)
+    assert str(e.value) == (
+        "expected new array length or list/tuple/str, not NoneType")
 
 def test_pointer_bool():
     BInt = new_primitive_type("int")
@@ -359,6 +362,9 @@
     assert int(c) == ord(b'A')
     py.test.raises(TypeError, cast, BChar, b'foo')
     py.test.raises(TypeError, cast, BChar, u+'foo')
+    e = py.test.raises(TypeError, newp, new_array_type(BPtr, None), 12.3)
+    assert str(e.value) == (
+        "expected new array length or list/tuple/str, not float")
 
 def test_reading_pointer_to_pointer():
     BVoidP = new_pointer_type(new_void_type())


More information about the pypy-commit mailing list