[pypy-commit] cffi char16_char32_t: tweaks

arigo pypy.commits at gmail.com
Wed May 31 11:17:07 EDT 2017


Author: Armin Rigo <arigo at tunes.org>
Branch: char16_char32_t
Changeset: r2957:8e7afeadc985
Date: 2017-05-31 17:16 +0200
http://bitbucket.org/cffi/cffi/changeset/8e7afeadc985/

Log:	tweaks

diff --git a/cffi/_cffi_include.h b/cffi/_cffi_include.h
--- a/cffi/_cffi_include.h
+++ b/cffi/_cffi_include.h
@@ -164,9 +164,9 @@
 #define _cffi_from_c_struct                                              \
     ((PyObject *(*)(char *, struct _cffi_ctypedescr *))_cffi_exports[18])
 #define _cffi_to_c_wchar_t                                               \
-    ((wchar_t(*)(PyObject *))_cffi_exports[19])
+    ((_cffi_wchar_t(*)(PyObject *))_cffi_exports[19])
 #define _cffi_from_c_wchar_t                                             \
-    ((PyObject *(*)(wchar_t))_cffi_exports[20])
+    ((PyObject *(*)(_cffi_wchar_t))_cffi_exports[20])
 #define _cffi_to_c_long_double                                           \
     ((long double(*)(PyObject *))_cffi_exports[21])
 #define _cffi_to_c__Bool                                                 \
@@ -231,15 +231,15 @@
 typedef uint16_t _cffi_wchar_t;   /* same random pick as _cffi_backend.c */
 #endif
 
-_CFFI_UNUSED_FN static int _cffi_to_c_char16_t(PyObject *o)
+_CFFI_UNUSED_FN static uint16_t _cffi_to_c_char16_t(PyObject *o)
 {
     if (sizeof(_cffi_wchar_t) == 2)
-        return _cffi_to_c_wchar_t(o);
+        return (uint16_t)_cffi_to_c_wchar_t(o);
     else
-        return _cffi_to_c_wchar3216_t(o);
+        return (uint16_t)_cffi_to_c_wchar3216_t(o);
 }
 
-_CFFI_UNUSED_FN static PyObject *_cffi_from_c_char16_t(int x)
+_CFFI_UNUSED_FN static PyObject *_cffi_from_c_char16_t(uint16_t x)
 {
     if (sizeof(_cffi_wchar_t) == 2)
         return _cffi_from_c_wchar_t(x);
@@ -250,9 +250,9 @@
 _CFFI_UNUSED_FN static int _cffi_to_c_char32_t(PyObject *o)
 {
     if (sizeof(_cffi_wchar_t) == 4)
-        return _cffi_to_c_wchar_t(o);
+        return (int)_cffi_to_c_wchar_t(o);
     else
-        return _cffi_to_c_wchar3216_t(o);
+        return (int)_cffi_to_c_wchar3216_t(o);
 }
 
 _CFFI_UNUSED_FN static PyObject *_cffi_from_c_char32_t(int x)
diff --git a/testing/cffi1/test_recompiler.py b/testing/cffi1/test_recompiler.py
--- a/testing/cffi1/test_recompiler.py
+++ b/testing/cffi1/test_recompiler.py
@@ -2272,6 +2272,8 @@
     assert lib.foo_4bytes(u+'\u1234') == u+'\u125e'
     assert lib.foo_4bytes(u+'\U00012345') == u+'\U0001236f'
     py.test.raises(TypeError, lib.foo_2bytes, u+'\U00012345')
+    py.test.raises(TypeError, lib.foo_2bytes, 1234)
+    py.test.raises(TypeError, lib.foo_4bytes, 1234)
 
 def test_char16_char32_plain_c():
     test_char16_char32_type(no_cpp=True)


More information about the pypy-commit mailing list