Author: Armin Rigo <[email protected]>
Branch: verifier2
Changeset: r713:10fa307768aa
Date: 2012-07-27 14:54 +0200
http://bitbucket.org/cffi/cffi/changeset/10fa307768aa/
Log: test_verify.test_ffi_nonfull_struct
diff --git a/cffi/verifier.py b/cffi/verifier.py
--- a/cffi/verifier.py
+++ b/cffi/verifier.py
@@ -386,11 +386,11 @@
prnt(' { %s = &p->%s; (void)tmp; }' % (
ftype.get_c_name('(*tmp)'), fname))
prnt('}')
- prnt('ssize_t %s(void)' % (layoutfuncname,))
+ prnt('ssize_t %s(ssize_t i)' % (layoutfuncname,))
prnt('{')
prnt(' struct _cffi_aligncheck { char x; %s y; };' % cname)
if tp.partial:
- prnt(' static Py_ssize_t nums[] = {')
+ prnt(' static ssize_t nums[] = {')
prnt(' sizeof(%s),' % cname)
prnt(' offsetof(struct _cffi_aligncheck, y),')
for fname in tp.fldnames:
@@ -398,7 +398,8 @@
prnt(' sizeof(((%s *)0)->%s),' % (cname, fname))
prnt(' -1')
prnt(' };')
- prnt(' return _cffi_get_struct_layout(nums);')
+ prnt(' if (i < 0) return 1;')
+ prnt(' return nums[i];')
else:
ffi = self.ffi
BStruct = ffi._get_cached_btype(tp)
@@ -440,15 +441,20 @@
layoutfuncname = '_cffi_layout_%s_%s' % (prefix, name)
cname = ('%s %s' % (prefix, name)).strip()
#
- BFunc = self.ffi.typeof("ssize_t(*)(void)")
+ BFunc = self.ffi.typeof("ssize_t(*)(ssize_t)")
function = module.load_function(BFunc, layoutfuncname)
- layout = function()
+ layout = function(-1)
if layout < 0:
raise ffiplatform.VerificationError(
"incompatible layout for %s" % cname)
elif layout == 0:
assert not tp.partial
else:
+ layout = []
+ while True:
+ x = function(len(layout))
+ if x < 0: break
+ layout.append(x)
totalsize = layout[0]
totalalignment = layout[1]
fieldofs = layout[2::2]
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit