Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r2078:9a74c1c6b5ce Date: 2015-05-22 00:12 +0200 http://bitbucket.org/cffi/cffi/changeset/9a74c1c6b5ce/
Log: Test and fix: ABI out-of-line didn't support C functions with dot- dot-dot (reported by lazka on irc) diff --git a/cffi/recompiler.py b/cffi/recompiler.py --- a/cffi/recompiler.py +++ b/cffi/recompiler.py @@ -581,10 +581,11 @@ def _generate_cpy_function_collecttype(self, tp, name): self._do_collect_type(tp.as_raw_function()) - if tp.ellipsis: + if tp.ellipsis and not self.target_is_python: self._do_collect_type(tp) def _generate_cpy_function_decl(self, tp, name): + assert not self.target_is_python assert isinstance(tp, model.FunctionPtrType) if tp.ellipsis: # cannot support vararg functions better than this: check for its @@ -702,7 +703,7 @@ prnt() def _generate_cpy_function_ctx(self, tp, name): - if tp.ellipsis: + if tp.ellipsis and not self.target_is_python: self._generate_cpy_constant_ctx(tp, name) return type_index = self._typesdict[tp.as_raw_function()] diff --git a/testing/cffi1/test_re_python.py b/testing/cffi1/test_re_python.py --- a/testing/cffi1/test_re_python.py +++ b/testing/cffi1/test_re_python.py @@ -12,6 +12,7 @@ #define BIGPOS 420000000000L #define BIGNEG -420000000000L int add42(int x) { return x + 42; } + int add43(int x, ...) { return x; } int globalvar42 = 1234; struct foo_s; typedef struct bar_s { int x; signed char a[]; } bar_t; @@ -37,6 +38,7 @@ #define BIGPOS 420000000000L #define BIGNEG -420000000000L int add42(int); + int add43(int, ...); int globalvar42; int no_such_function(int); int no_such_globalvar; @@ -68,6 +70,13 @@ assert lib.add42(-10) == 32 assert type(lib.add42) is _cffi_backend.FFI.CData +def test_function_with_varargs(): + import _cffi_backend + from re_python_pysrc import ffi + lib = ffi.dlopen(extmod) + assert lib.add43(45, ffi.cast("int", -5)) == 45 + assert type(lib.add43) is _cffi_backend.FFI.CData + def test_dlclose(): import _cffi_backend from re_python_pysrc import ffi _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit