[pypy-commit] pypy py3.5: hg merge default

arigo pypy.commits at gmail.com
Wed Jan 10 17:21:19 EST 2018


Author: Armin Rigo <arigo at tunes.org>
Branch: py3.5
Changeset: r93650:52e62b9d7e92
Date: 2018-01-10 22:44 +0100
http://bitbucket.org/pypy/pypy/changeset/52e62b9d7e92/

Log:	hg merge default

diff --git a/pypy/module/_cffi_backend/test/test_recompiler.py b/pypy/module/_cffi_backend/test/test_recompiler.py
--- a/pypy/module/_cffi_backend/test/test_recompiler.py
+++ b/pypy/module/_cffi_backend/test/test_recompiler.py
@@ -8,7 +8,8 @@
 
 @unwrap_spec(cdef='text', module_name='text', source='text', packed=int)
 def prepare(space, cdef, module_name, source, w_includes=None,
-            w_extra_source=None, w_min_version=None, packed=False):
+            w_extra_source=None, w_min_version=None, packed=False,
+            w_extra_compile_args=None):
     try:
         import cffi
         from cffi import FFI            # <== the system one, which
@@ -55,10 +56,14 @@
     sources = []
     if w_extra_source is not None:
         sources.append(space.str_w(w_extra_source))
+    kwargs = {}
+    if w_extra_compile_args is not None:
+        kwargs['extra_compile_args'] = space.unwrap(w_extra_compile_args)
     ext = ffiplatform.get_extension(c_file, module_name,
             include_dirs=[str(rdir)],
             export_symbols=['_cffi_pypyinit_' + base_module_name],
-            sources=sources)
+            sources=sources,
+            **kwargs)
     ffiplatform.compile(str(rdir), ext)
 
     for extension in ['so', 'pyd', 'dylib']:
@@ -2055,3 +2060,51 @@
            "Such structs are only supported as return value if the function is "
            "'API mode' and non-variadic (i.e. declared inside ffibuilder.cdef()"
            "+ffibuilder.set_source() and not taking a final '...' argument)")
+
+    def test_gcc_visibility_hidden(self):
+        import sys
+        if sys.platform == 'win32':
+            skip("test for gcc/clang")
+        ffi, lib = self.prepare("""
+        int f(int);
+        """, "test_gcc_visibility_hidden", """
+        int f(int a) { return a + 40; }
+        """, extra_compile_args=['-fvisibility=hidden'])
+        assert lib.f(2) == 42
+
+    def test_override_default_definition(self):
+        ffi, lib = self.prepare("""
+        typedef long int16_t, char16_t;
+        """, "test_override_default_definition", """
+        """)
+        assert ffi.typeof("int16_t") is ffi.typeof("char16_t") is ffi.typeof("long")
+
+    def test_char16_char32_plain_c(self):
+        ffi, lib = self.prepare("""
+            char16_t foo_2bytes(char16_t);
+            char32_t foo_4bytes(char32_t);
+        """, "test_char16_char32_type_nocpp", """
+        #if !defined(__cplusplus) || (!defined(_LIBCPP_VERSION) && __cplusplus < 201103L)
+        typedef uint_least16_t char16_t;
+        typedef uint_least32_t char32_t;
+        #endif
+
+        char16_t foo_2bytes(char16_t a) { return (char16_t)(a + 42); }
+        char32_t foo_4bytes(char32_t a) { return (char32_t)(a + 42); }
+        """, min_version=(1, 11, 0))
+        assert lib.foo_2bytes(u'\u1234') == u'\u125e'
+        assert lib.foo_4bytes(u'\u1234') == u'\u125e'
+        assert lib.foo_4bytes(u'\U00012345') == u'\U0001236f'
+        raises(TypeError, lib.foo_2bytes, u'\U00012345')
+        raises(TypeError, lib.foo_2bytes, 1234)
+        raises(TypeError, lib.foo_4bytes, 1234)
+
+    def test_loader_spec(self):
+        import sys
+        ffi, lib = self.prepare("", "test_loader_spec", "")
+        if sys.version_info < (3,):
+            assert not hasattr(lib, '__loader__')
+            assert not hasattr(lib, '__spec__')
+        else:
+            assert lib.__loader__ is None
+            assert lib.__spec__ is None


More information about the pypy-commit mailing list