[pypy-commit] pypy cffi-1.0: test_*_struct

arigo noreply at buildbot.pypy.org
Sun May 17 21:17:24 CEST 2015


Author: Armin Rigo <arigo at tunes.org>
Branch: cffi-1.0
Changeset: r77365:42d47a500c5b
Date: 2015-05-17 21:17 +0200
http://bitbucket.org/pypy/pypy/changeset/42d47a500c5b/

Log:	test_*_struct

diff --git a/pypy/module/_cffi_backend/cdlopen.py b/pypy/module/_cffi_backend/cdlopen.py
--- a/pypy/module/_cffi_backend/cdlopen.py
+++ b/pypy/module/_cffi_backend/cdlopen.py
@@ -6,8 +6,8 @@
 from pypy.module._rawffi.interp_rawffi import wrap_dlopenerror
 
 from pypy.module._cffi_backend.parse_c_type import (
-    _CFFI_OPCODE_T, GLOBAL_S, CDL_INTCONST_S, STRUCT_UNION_S, FIELD_S, ENUM_S,
-    ll_set_cdl_realize_global_int)
+    _CFFI_OPCODE_T, GLOBAL_S, CDL_INTCONST_S, STRUCT_UNION_S, FIELD_S,
+    ENUM_S, TYPENAME_S, ll_set_cdl_realize_global_int)
 from pypy.module._cffi_backend.realize_c_type import getop
 from pypy.module._cffi_backend.lib_obj import W_LibObject
 from pypy.module._cffi_backend import cffi_opcode
@@ -217,4 +217,17 @@
         ffi.ctxobj.ctx.c_enums = nenums
         rffi.setintfield(ffi.ctxobj.ctx, 'c_num_enums', n)
 
+    if w_typenames:
+        # unpack a tuple of strings, each of which describes one typename_s
+        # entry
+        typenames_w = space.fixedview(w_typenames)
+        n = len(typenames_w)
+        ntypenames = allocate_array(ffi, TYPENAME_S, n)
+        for i in range(n):
+            decoder = StringDecoder(ffi, space.str_w(typenames_w[i]))
+            rffi.setintfield(ntypenames[i],'c_type_index',decoder.next_4bytes())
+            ntypenames[i].c_name = decoder.next_name()
+        ffi.ctxobj.ctx.c_typenames = ntypenames
+        rffi.setintfield(ffi.ctxobj.ctx, 'c_num_typenames', n)
+
     # ... XXXX


More information about the pypy-commit mailing list