[pypy-commit] cffi cffi-1.0: fixes

arigo noreply at buildbot.pypy.org
Fri Apr 24 10:12:41 CEST 2015


Author: Armin Rigo <arigo at tunes.org>
Branch: cffi-1.0
Changeset: r1782:e69cf8f75f84
Date: 2015-04-23 09:08 +0200
http://bitbucket.org/cffi/cffi/changeset/e69cf8f75f84/

Log:	fixes

diff --git a/c/_cffi_backend.c b/c/_cffi_backend.c
--- a/c/_cffi_backend.c
+++ b/c/_cffi_backend.c
@@ -4086,13 +4086,11 @@
     boffsetmax = (boffsetmax + 7) / 8;        /* bits -> bytes */
     boffsetmax = (boffsetmax + alignment - 1) & ~(alignment-1);
     if (totalsize < 0) {
-        totalsize = boffsetmax;
-        if (totalsize == 0)
-            totalsize = 1;
+        totalsize = boffsetmax ? boffsetmax : 1;
     }
     else {
-        if (detect_custom_layout(ct, sflags, boffsetmax, totalsize,
-                                 "wrong total size", "", "") < 0)
+        if (detect_custom_layout(ct, sflags, boffsetmax ? boffsetmax : 1,
+                                 totalsize, "wrong total size", "", "") < 0)
             goto error;
         if (totalsize < boffsetmax) {
             PyErr_Format(PyExc_TypeError,
diff --git a/cffi/api.py b/cffi/api.py
--- a/cffi/api.py
+++ b/cffi/api.py
@@ -570,7 +570,9 @@
 def _set_cdef_types(ffi):
     struct_unions = []
     pending_completion = []
-    for name, tp in sorted(ffi._parser._declarations.items()):
+    lst = ffi._parser._declarations.items()
+    lst = sorted(lst, key=lambda x: x[0].split(' ', 1)[1])
+    for name, tp in lst:
         kind, basename = name.split(' ', 1)
         if kind == 'struct' or kind == 'union':
             if kind == 'struct':
diff --git a/new/test_dlopen.py b/new/test_dlopen.py
--- a/new/test_dlopen.py
+++ b/new/test_dlopen.py
@@ -13,6 +13,12 @@
     ffi.cdef("union foo_s { int a, b; };")
     assert ffi.sizeof("union foo_s") == 4
 
+def test_cdef_struct_union():
+    ffi = FFI()
+    ffi.cdef("union bar_s { int a; }; struct foo_s { int b; };")
+    assert ffi.sizeof("union bar_s") == 4
+    assert ffi.sizeof("struct foo_s") == 4
+
 def test_math_sin():
     py.test.skip("XXX redo!")
     ffi = FFI()


More information about the pypy-commit mailing list