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