Author: Armin Rigo <[email protected]>
Branch: cffi-1.0
Changeset: r1736:75221f10643d
Date: 2015-04-16 16:41 +0200
http://bitbucket.org/cffi/cffi/changeset/75221f10643d/
Log: hg merge default
diff --git a/c/_cffi_backend.c b/c/_cffi_backend.c
--- a/c/_cffi_backend.c
+++ b/c/_cffi_backend.c
@@ -3782,9 +3782,10 @@
for (i=0; i<nb_fields; i++) {
PyObject *fname;
CTypeDescrObject *ftype;
- int fbitsize = -1, falign, do_align, foffset = -1;
-
- if (!PyArg_ParseTuple(PyList_GET_ITEM(fields, i), "O!O!|ii:list item",
+ int fbitsize = -1, falign, do_align;
+ Py_ssize_t foffset = -1;
+
+ if (!PyArg_ParseTuple(PyList_GET_ITEM(fields, i), "O!O!|in:list item",
&PyText_Type, &fname,
&CTypeDescr_Type, &ftype,
&fbitsize, &foffset))
diff --git a/cffi/cparser.py b/cffi/cparser.py
--- a/cffi/cparser.py
+++ b/cffi/cparser.py
@@ -262,7 +262,10 @@
#
if decl.name:
tp = self._get_type(node, partial_length_ok=True)
- if self._is_constant_globalvar(node):
+ if tp.is_raw_function:
+ tp = self._get_type_pointer(tp)
+ self._declare('function ' + decl.name, tp)
+ elif self._is_constant_globalvar(node):
self._declare('constant ' + decl.name, tp)
else:
self._declare('variable ' + decl.name, tp)
diff --git a/testing/test_function.py b/testing/test_function.py
--- a/testing/test_function.py
+++ b/testing/test_function.py
@@ -292,7 +292,6 @@
assert ffi.string(a) == b'4.4.4.4'
def test_function_typedef(self):
- py.test.skip("using really obscure C syntax")
ffi = FFI(backend=self.Backend())
ffi.cdef("""
typedef double func_t(double);
diff --git a/testing/test_verify.py b/testing/test_verify.py
--- a/testing/test_verify.py
+++ b/testing/test_verify.py
@@ -1197,6 +1197,15 @@
""")
assert lib.foo_func(lib.BB) == lib.BB == 2
+def test_function_typedef():
+ ffi = FFI()
+ ffi.cdef("""
+ typedef double func_t(double);
+ func_t sin;
+ """)
+ lib = ffi.verify('#include <math.h>', libraries=lib_m)
+ assert lib.sin(1.23) == math.sin(1.23)
+
def test_callback_calling_convention():
py.test.skip("later")
if sys.platform != 'win32':
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit