[pypy-commit] cffi cffi-1.0: Test and fix
arigo
noreply at buildbot.pypy.org
Fri Apr 17 17:41:56 CEST 2015
Author: Armin Rigo <arigo at tunes.org>
Branch: cffi-1.0
Changeset: r1744:15360a5f6128
Date: 2015-04-17 17:42 +0200
http://bitbucket.org/cffi/cffi/changeset/15360a5f6128/
Log: Test and fix
diff --git a/new/recompiler.py b/new/recompiler.py
--- a/new/recompiler.py
+++ b/new/recompiler.py
@@ -97,6 +97,10 @@
def _prnt(self, what=''):
self._f.write(what + '\n')
+ def _gettypenum(self, type):
+ # a KeyError here is a bug. please report it! :-)
+ return self._typesdict[type]
+
def write_source_to_f(self, f, preamble):
self._f = f
prnt = self._prnt
@@ -215,7 +219,7 @@
def _convert_funcarg_to_c_ptr_or_array(self, tp, fromvar, tovar, errcode):
self._prnt(' datasize = _cffi_prepare_pointer_call_argument(')
self._prnt(' _cffi_type(%d), %s, (char **)&%s);' % (
- self._typesdict[tp], fromvar, tovar))
+ self._gettypenum(tp), fromvar, tovar))
self._prnt(' if (datasize != 0) {')
self._prnt(' if (datasize < 0)')
self._prnt(' %s;' % errcode)
@@ -223,7 +227,7 @@
self._prnt(' memset((void *)%s, 0, (size_t)datasize);' % (tovar,))
self._prnt(' if (_cffi_convert_array_from_object('
'(char *)%s, _cffi_type(%d), %s) < 0)' % (
- tovar, self._typesdict[tp], fromvar))
+ tovar, self._gettypenum(tp), fromvar))
self._prnt(' %s;' % errcode)
self._prnt(' }')
diff --git a/new/test_recompiler.py b/new/test_recompiler.py
--- a/new/test_recompiler.py
+++ b/new/test_recompiler.py
@@ -97,6 +97,13 @@
lib = verify(ffi, 'test_funcarg_ptr', 'int foo(int *p) { return *p; }')
assert lib.foo([-12345]) == -12345
+def test_funcres_ptr():
+ ffi = FFI()
+ ffi.cdef("int *foo(void);")
+ lib = verify(ffi, 'test_funcres_ptr',
+ 'int *foo(void) { static int x=-12345; return &x; }')
+ assert lib.foo()[0] == -12345
+
def test_global_var_array():
ffi = FFI()
ffi.cdef("int a[100];")
More information about the pypy-commit
mailing list