Author: Armin Rigo <[email protected]>
Branch: c99-array
Changeset: r1388:5396584e5493
Date: 2013-11-08 20:09 +0100
http://bitbucket.org/cffi/cffi/changeset/5396584e5493/

Log:    Fix some tests

diff --git a/cffi/model.py b/cffi/model.py
--- a/cffi/model.py
+++ b/cffi/model.py
@@ -327,7 +327,6 @@
                             "field '%s.%s' has a bogus size?" % (
                             self.name, self.fldnames[i] or '{}'))
                     ftype = ftype.resolve_length(nlen)
-                    fsize = 0
                     self.fldtypes = (self.fldtypes[:i] + (ftype,) +
                                      self.fldtypes[i+1:])
                 #
diff --git a/cffi/vengine_cpy.py b/cffi/vengine_cpy.py
--- a/cffi/vengine_cpy.py
+++ b/cffi/vengine_cpy.py
@@ -531,9 +531,10 @@
                     continue        # xxx ignore fbitsize for now
                 check(layout[i], ffi.offsetof(BStruct, fname),
                       "wrong offset for field %r" % (fname,))
-                BField = ffi._get_cached_btype(ftype)
-                check(layout[i+1], ffi.sizeof(BField),
-                      "wrong size for field %r" % (fname,))
+                if layout[i+1] != 0:
+                    BField = ffi._get_cached_btype(ftype)
+                    check(layout[i+1], ffi.sizeof(BField),
+                          "wrong size for field %r" % (fname,))
                 i += 2
             assert i == len(layout)
 
diff --git a/cffi/vengine_gen.py b/cffi/vengine_gen.py
--- a/cffi/vengine_gen.py
+++ b/cffi/vengine_gen.py
@@ -255,11 +255,14 @@
         prnt('  static ssize_t nums[] = {')
         prnt('    sizeof(%s),' % cname)
         prnt('    offsetof(struct _cffi_aligncheck, y),')
-        for fname, _, fbitsize in tp.enumfields():
+        for fname, ftype, fbitsize in tp.enumfields():
             if fbitsize >= 0:
                 continue      # xxx ignore fbitsize for now
             prnt('    offsetof(%s, %s),' % (cname, fname))
-            prnt('    sizeof(((%s *)0)->%s),' % (cname, fname))
+            if isinstance(ftype, model.ArrayType) and ftype.length is None:
+                prnt('    0,  /* %s */' % ftype._get_c_name())
+            else:
+                prnt('    sizeof(((%s *)0)->%s),' % (cname, fname))
         prnt('    -1')
         prnt('  };')
         prnt('  return nums[i];')
@@ -319,9 +322,10 @@
                     continue        # xxx ignore fbitsize for now
                 check(layout[i], ffi.offsetof(BStruct, fname),
                       "wrong offset for field %r" % (fname,))
-                BField = ffi._get_cached_btype(ftype)
-                check(layout[i+1], ffi.sizeof(BField),
-                      "wrong size for field %r" % (fname,))
+                if layout[i+1] != 0:
+                    BField = ffi._get_cached_btype(ftype)
+                    check(layout[i+1], ffi.sizeof(BField),
+                          "wrong size for field %r" % (fname,))
                 i += 2
             assert i == len(layout)
 
@@ -483,7 +487,7 @@
             value = self._load_constant(False, tp_ptr, name, module)
             # 'value' is a <cdata 'type *'> which we have to replace with
             # a <cdata 'type[N]'> if the N is actually known
-            if tp.length is not None:
+            if tp.length is not None and tp.length != '...':
                 BArray = self.ffi._get_cached_btype(tp)
                 value = self.ffi.cast(BArray, value)
             setattr(library, name, value)
diff --git a/testing/test_verify.py b/testing/test_verify.py
--- a/testing/test_verify.py
+++ b/testing/test_verify.py
@@ -517,15 +517,15 @@
     ffi.verify("struct foo_s { int x; int a[]; };")
     assert ffi.sizeof('struct foo_s') == 1 * ffi.sizeof('int')
     s = ffi.new("struct foo_s *", [424242, 4])
-    assert ffi.sizeof(s) == 5 * ffi.sizeof('int')
+    assert ffi.sizeof(s[0]) == 1 * ffi.sizeof('int')   # the same in C
     assert s.a[3] == 0
     s = ffi.new("struct foo_s *", [424242, [-40, -30, -20, -10]])
-    assert ffi.sizeof(s) == 5 * ffi.sizeof('int')
+    assert ffi.sizeof(s[0]) == 1 * ffi.sizeof('int')
     assert s.a[3] == -10
     s = ffi.new("struct foo_s *")
-    assert ffi.sizeof(s) == 1 * ffi.sizeof('int')
+    assert ffi.sizeof(s[0]) == 1 * ffi.sizeof('int')
     s = ffi.new("struct foo_s *", [424242])
-    assert ffi.sizeof(s) == 1 * ffi.sizeof('int')
+    assert ffi.sizeof(s[0]) == 1 * ffi.sizeof('int')
 
 def test_struct_array_c99_2():
     if sys.platform == 'win32':
@@ -535,15 +535,15 @@
     ffi.verify("struct foo_s { int x, y; int a[]; };")
     assert ffi.sizeof('struct foo_s') == 2 * ffi.sizeof('int')
     s = ffi.new("struct foo_s *", [424242, 4])
-    assert ffi.sizeof(s) == 6 * ffi.sizeof('int')
+    assert ffi.sizeof(s[0]) == 2 * ffi.sizeof('int')
     assert s.a[3] == 0
     s = ffi.new("struct foo_s *", [424242, [-40, -30, -20, -10]])
-    assert ffi.sizeof(s) == 6 * ffi.sizeof('int')
+    assert ffi.sizeof(s[0]) == 2 * ffi.sizeof('int')
     assert s.a[3] == -10
     s = ffi.new("struct foo_s *")
-    assert ffi.sizeof(s) == 2 * ffi.sizeof('int')
+    assert ffi.sizeof(s[0]) == 2 * ffi.sizeof('int')
     s = ffi.new("struct foo_s *", [424242])
-    assert ffi.sizeof(s) == 2 * ffi.sizeof('int')
+    assert ffi.sizeof(s[0]) == 2 * ffi.sizeof('int')
 
 def test_struct_ptr_to_array_field():
     ffi = FFI()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to