[pypy-commit] cffi default: verify: Function pointer as argument
arigo
noreply at buildbot.pypy.org
Wed Jul 11 12:34:10 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r626:2697448f7035
Date: 2012-07-11 12:25 +0200
http://bitbucket.org/cffi/cffi/changeset/2697448f7035/
Log: verify: Function pointer as argument
diff --git a/cffi/verifier.py b/cffi/verifier.py
--- a/cffi/verifier.py
+++ b/cffi/verifier.py
@@ -151,8 +151,9 @@
converter = '_cffi_to_c_%s' % (tp.name.replace(' ', '_'),)
errvalue = '-1'
#
- elif isinstance(tp, model.PointerType):
- if (isinstance(tp.totype, model.PrimitiveType) and
+ elif isinstance(tp, (model.PointerType, model.FunctionPtrType)):
+ if (isinstance(tp, model.PointerType) and
+ isinstance(tp.totype, model.PrimitiveType) and
tp.totype.name == 'char'):
converter = '_cffi_to_c_char_p'
else:
@@ -160,7 +161,7 @@
extraarg = ', _cffi_type(%d)' % self.gettypenum(tp)
errvalue = 'NULL'
#
- elif isinstance(tp, model.StructType):
+ elif isinstance(tp, model.StructOrUnion):
# a struct (not a struct pointer) as a function argument
self.prnt(' if (_cffi_to_c((char*)&%s, _cffi_type(%d), %s) < 0)'
% (tovar, self.gettypenum(tp), fromvar))
diff --git a/testing/test_verify.py b/testing/test_verify.py
--- a/testing/test_verify.py
+++ b/testing/test_verify.py
@@ -622,3 +622,11 @@
foochar = ffi.cast("char *(*)(void)", lib.fooptr)
s = foochar()
assert str(s) == "foobar"
+
+def test_funcptr_as_argument():
+ ffi = FFI()
+ ffi.cdef("""
+ void qsort(void *base, size_t nel, size_t width,
+ int (*compar)(const void *, const void *));
+ """)
+ ffi.verify("#include <stdlib.h>")
More information about the pypy-commit
mailing list