[pypy-commit] cffi cffi-1.0: fixes

arigo noreply at buildbot.pypy.org
Sat Apr 18 13:27:05 CEST 2015


Author: Armin Rigo <arigo at tunes.org>
Branch: cffi-1.0
Changeset: r1754:6d8389513bdb
Date: 2015-04-18 13:27 +0200
http://bitbucket.org/cffi/cffi/changeset/6d8389513bdb/

Log:	fixes

diff --git a/cffi/model.py b/cffi/model.py
--- a/cffi/model.py
+++ b/cffi/model.py
@@ -454,6 +454,7 @@
         structname = '$%s' % name
     tp = StructType(structname, None, None, None)
     tp.force_the_name(name)
+    tp.origin = "unknown_type"
     return tp
 
 def unknown_ptr_type(name, structname=None):
diff --git a/new/recompiler.py b/new/recompiler.py
--- a/new/recompiler.py
+++ b/new/recompiler.py
@@ -150,6 +150,14 @@
                 prnt('};')
                 prnt()
         #
+        # check for a possible internal inconsistency: _cffi_struct_unions
+        # should have been generated with exactly self._struct_unions
+        lst = self._lsts["struct_union"]
+        for tp, i in self._struct_unions.items():
+            assert i < len(lst)
+            assert lst[i].startswith('  { "%s"' % tp.name)
+        assert len(lst) == len(self._struct_unions)
+        #
         # the declaration of '_cffi_type_context'
         prnt('static const struct _cffi_type_context_s _cffi_type_context = {')
         prnt('  _cffi_types,')
@@ -271,6 +279,10 @@
         type_index = self._typesdict[tp]
         self._lsts["typename"].append(
             '  { "%s", %d },' % (name, type_index))
+        if getattr(tp, "origin", None) == "unknown_type":
+            self._generate_cpy_struct_ctx(tp, tp.name)
+        elif isinstance(tp, model.NamedPointerType):
+            self._generate_cpy_struct_ctx(tp.totype, tp.totype.name)
 
     # ----------
     # function declarations
@@ -539,6 +551,7 @@
         self.cffi_types[index] = CffiOp(OP_POINTER, self._typesdict[tp.totype])
 
     _emit_bytecode_ConstPointerType = _emit_bytecode_PointerType
+    _emit_bytecode_NamedPointerType = _emit_bytecode_PointerType
 
     def _emit_bytecode_FunctionPtrType(self, tp, index):
         raw = tp.as_raw_function()
diff --git a/new/test_recompiler.py b/new/test_recompiler.py
--- a/new/test_recompiler.py
+++ b/new/test_recompiler.py
@@ -118,6 +118,16 @@
     lib = verify(ffi, 'test_verify_typedef', 'typedef int **foo_t;')
     assert ffi.sizeof("foo_t") == ffi.sizeof("void *")
 
+def test_verify_typedef_dotdotdot():
+    ffi = FFI()
+    ffi.cdef("typedef ... foo_t;")
+    verify(ffi, 'test_verify_typedef_dotdotdot', 'typedef int **foo_t;')
+
+def test_verify_typedef_star_dotdotdot():
+    ffi = FFI()
+    ffi.cdef("typedef ... *foo_t;")
+    verify(ffi, 'test_verify_typedef_star_dotdotdot', 'typedef int **foo_t;')
+
 def test_global_var_int():
     ffi = FFI()
     ffi.cdef("int a, b, c;")


More information about the pypy-commit mailing list