Author: Armin Rigo <ar...@tunes.org> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit