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