[pypy-commit] pypy default: update to cffi/4d3306c3afcc

arigo noreply at buildbot.pypy.org
Thu May 28 21:03:09 CEST 2015


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r77666:1752064fc012
Date: 2015-05-28 21:03 +0200
http://bitbucket.org/pypy/pypy/changeset/1752064fc012/

Log:	update to cffi/4d3306c3afcc

diff --git a/lib_pypy/cffi/cffi_opcode.py b/lib_pypy/cffi/cffi_opcode.py
--- a/lib_pypy/cffi/cffi_opcode.py
+++ b/lib_pypy/cffi/cffi_opcode.py
@@ -52,6 +52,7 @@
 OP_CONSTANT_INT    = 31
 OP_GLOBAL_VAR      = 33
 OP_DLOPEN_FUNC     = 35
+OP_DLOPEN_CONST    = 37
 
 PRIM_VOID          = 0
 PRIM_BOOL          = 1
diff --git a/lib_pypy/cffi/parse_c_type.h b/lib_pypy/cffi/parse_c_type.h
--- a/lib_pypy/cffi/parse_c_type.h
+++ b/lib_pypy/cffi/parse_c_type.h
@@ -25,6 +25,7 @@
 #define _CFFI_OP_CONSTANT_INT   31
 #define _CFFI_OP_GLOBAL_VAR     33
 #define _CFFI_OP_DLOPEN_FUNC    35
+#define _CFFI_OP_DLOPEN_CONST   37
 
 #define _CFFI_PRIM_VOID          0
 #define _CFFI_PRIM_BOOL          1
diff --git a/lib_pypy/cffi/recompiler.py b/lib_pypy/cffi/recompiler.py
--- a/lib_pypy/cffi/recompiler.py
+++ b/lib_pypy/cffi/recompiler.py
@@ -982,8 +982,12 @@
                 raise ffiplatform.VerificationError(
                     "constant '%s' is of type '%s', whose size is not known"
                     % (name, tp._get_c_name()))
+            if self.target_is_python:
+                const_kind = OP_DLOPEN_CONST
+            else:
+                const_kind = OP_CONSTANT
             type_index = self._typesdict[tp]
-            type_op = CffiOp(OP_CONSTANT, type_index)
+            type_op = CffiOp(const_kind, type_index)
         self._lsts["global"].append(
             GlobalExpr(name, '_cffi_const_%s' % name, type_op))
 
diff --git a/pypy/module/_cffi_backend/cffi_opcode.py b/pypy/module/_cffi_backend/cffi_opcode.py
--- a/pypy/module/_cffi_backend/cffi_opcode.py
+++ b/pypy/module/_cffi_backend/cffi_opcode.py
@@ -52,6 +52,7 @@
 OP_CONSTANT_INT    = 31
 OP_GLOBAL_VAR      = 33
 OP_DLOPEN_FUNC     = 35
+OP_DLOPEN_CONST    = 37
 
 PRIM_VOID          = 0
 PRIM_BOOL          = 1
diff --git a/pypy/module/_cffi_backend/lib_obj.py b/pypy/module/_cffi_backend/lib_obj.py
--- a/pypy/module/_cffi_backend/lib_obj.py
+++ b/pypy/module/_cffi_backend/lib_obj.py
@@ -122,7 +122,8 @@
                 w_result = realize_c_type.realize_global_int(self.ffi, g,
                                                              index)
                 #
-            elif op == cffi_opcode.OP_CONSTANT:
+            elif (op == cffi_opcode.OP_CONSTANT or
+                  op == cffi_opcode.OP_DLOPEN_CONST):
                 # A constant which is not of integer type
                 w_ct = realize_c_type.realize_c_type(
                     self.ffi, self.ctx.c_types, getarg(g.c_type_op))
@@ -133,8 +134,10 @@
                     raise oefmt(space.w_SystemError,
                                 "constant has no known size")
                 if not fetch_funcptr:   # for dlopen() style
+                    assert op == cffi_opcode.OP_DLOPEN_CONST
                     ptr = self.cdlopen_fetch(attr)
                 else:
+                    assert op == cffi_opcode.OP_CONSTANT
                     ptr = lltype.malloc(rffi.CCHARP.TO, w_ct.size, flavor='raw')
                     self.ffi._finalizer.free_mems.append(ptr)
                     fetch_funcptr(ptr)
diff --git a/pypy/module/test_lib_pypy/cffi_tests/cffi1/test_dlopen.py b/pypy/module/test_lib_pypy/cffi_tests/cffi1/test_dlopen.py
--- a/pypy/module/test_lib_pypy/cffi_tests/cffi1/test_dlopen.py
+++ b/pypy/module/test_lib_pypy/cffi_tests/cffi1/test_dlopen.py
@@ -31,7 +31,7 @@
 ffi = _cffi_backend.FFI('test_valid_global_constant',
     _version = 0x2601,
     _types = b'\x00\x00\x0D\x01\x00\x00\x09\x01',
-    _globals = (b'\x00\x00\x01\x1DBB',0,b'\x00\x00\x00\x1DBF',0),
+    _globals = (b'\x00\x00\x01\x25BB',0,b'\x00\x00\x00\x25BF',0),
 )
 """
 
diff --git a/pypy/module/test_lib_pypy/cffi_tests/cffi1/test_re_python.py b/pypy/module/test_lib_pypy/cffi_tests/cffi1/test_re_python.py
--- a/pypy/module/test_lib_pypy/cffi_tests/cffi1/test_re_python.py
+++ b/pypy/module/test_lib_pypy/cffi_tests/cffi1/test_re_python.py
@@ -167,7 +167,7 @@
 def test_global_const_nonint():
     from re_python_pysrc import ffi
     lib = ffi.dlopen(extmod)
-    assert ffi.string(lib.globalconsthello, 8) == "hello"
+    assert ffi.string(lib.globalconsthello, 8) == b"hello"
     py.test.raises(AttributeError, ffi.addressof, lib, 'globalconsthello')
 
 def test_rtld_constants():
diff --git a/pypy/module/test_lib_pypy/cffi_tests/cffi1/test_recompiler.py b/pypy/module/test_lib_pypy/cffi_tests/cffi1/test_recompiler.py
--- a/pypy/module/test_lib_pypy/cffi_tests/cffi1/test_recompiler.py
+++ b/pypy/module/test_lib_pypy/cffi_tests/cffi1/test_recompiler.py
@@ -881,7 +881,7 @@
     # but we can get its address
     p = ffi.addressof(lib, 'globvar')
     assert ffi.typeof(p) == ffi.typeof('opaque_t *')
-    assert ffi.string(ffi.cast("char *", p), 8) == "hello"
+    assert ffi.string(ffi.cast("char *", p), 8) == b"hello"
 
 def test_constant_of_value_unknown_to_the_compiler():
     extra_c_source = udir.join(


More information about the pypy-commit mailing list