[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