Author: Armin Rigo <[email protected]>
Branch: cffi-1.0
Changeset: r2007:2e62c9373e2b
Date: 2015-05-16 11:06 +0200
http://bitbucket.org/cffi/cffi/changeset/2e62c9373e2b/

Log:    Test and fix for struct names from included ffis

diff --git a/c/cdlopen.c b/c/cdlopen.c
--- a/c/cdlopen.c
+++ b/c/cdlopen.c
@@ -254,7 +254,7 @@
             nstructs[i].type_index = cdl_4bytes(s); s += 4;
             nstructs[i].flags = cdl_4bytes(s); s += 4;
             nstructs[i].name = s;
-            if (nstructs[i].flags & _CFFI_F_OPAQUE) {
+            if (nstructs[i].flags & (_CFFI_F_OPAQUE | _CFFI_F_EXTERNAL)) {
                 nstructs[i].size = (size_t)-1;
                 nstructs[i].alignment = -1;
                 nstructs[i].first_field_index = -1;
diff --git a/testing/cffi1/test_dlopen.py b/testing/cffi1/test_dlopen.py
--- a/testing/cffi1/test_dlopen.py
+++ b/testing/cffi1/test_dlopen.py
@@ -124,3 +124,23 @@
     _globals = (b'\xFF\xFF\xFF\x1FBB',-42,),
 )
 """
+
+def test_struct_included():
+    baseffi = FFI()
+    baseffi.cdef("struct foo_s { int x; };")
+    baseffi.set_source('test_struct_included_base', None)
+    #
+    ffi = FFI()
+    ffi.include(baseffi)
+    target = udir.join('test_struct_included.py')
+    assert make_py_source(ffi, 'test_struct_included', str(target))
+    assert target.read() == r"""# auto-generated file
+import _cffi_backend
+from test_struct_included_base import ffi as _ffi0
+
+ffi = _cffi_backend.FFI(b'test_struct_included',
+    _types = b'\x00\x00\x00\x09',
+    _struct_unions = ((b'\x00\x00\x00\x00\x00\x00\x00\x08foo_s',),),
+    _includes = (_ffi0,),
+)
+"""
diff --git a/testing/cffi1/test_re_python.py b/testing/cffi1/test_re_python.py
--- a/testing/cffi1/test_re_python.py
+++ b/testing/cffi1/test_re_python.py
@@ -75,13 +75,13 @@
     assert ffi.string(e) == "CC"
 
 def test_include_1():
-    ffi2 = FFI()
-    ffi2.cdef("static const int k2 = 121212;")
-    ffi2.include(original_ffi)
+    sub_ffi = FFI()
+    sub_ffi.cdef("static const int k2 = 121212;")
+    sub_ffi.include(original_ffi)
     assert 'macro FOOBAR' in original_ffi._parser._declarations
     assert 'macro FOOBAZ' in original_ffi._parser._declarations
-    ffi2.set_source('re_python_pysrc', None)
-    ffi2.emit_python_code(str(tmpdir.join('_re_include_1.py')))
+    sub_ffi.set_source('re_python_pysrc', None)
+    sub_ffi.emit_python_code(str(tmpdir.join('_re_include_1.py')))
     #
     from _re_include_1 import ffi
     assert ffi.integer_const('FOOBAR') == -42
@@ -91,3 +91,6 @@
     assert lib.FOOBAR == -42
     assert lib.FOOBAZ == -43
     assert lib.k2 == 121212
+    #
+    p = ffi.new("bar_t *", [5, "foobar"])
+    assert p.a[4] == ord('a')
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to