[pypy-commit] cffi cffi-1.0: Python 3 compat
arigo
noreply at buildbot.pypy.org
Sat May 16 14:41:31 CEST 2015
Author: Armin Rigo <arigo at tunes.org>
Branch: cffi-1.0
Changeset: r2015:2f3f03bd8519
Date: 2015-05-16 14:41 +0200
http://bitbucket.org/cffi/cffi/changeset/2f3f03bd8519/
Log: Python 3 compat
diff --git a/cffi/recompiler.py b/cffi/recompiler.py
--- a/cffi/recompiler.py
+++ b/cffi/recompiler.py
@@ -407,15 +407,13 @@
def _to_py(self, x):
if isinstance(x, str):
- x = x.encode('ascii')
- if isinstance(x, bytes):
return "b'%s'" % (x,)
if isinstance(x, (list, tuple)):
rep = [self._to_py(item) for item in x]
if len(rep) == 1:
rep.append('')
return "(%s)" % (','.join(rep),)
- return x.as_python_expr()
+ return x.as_python_expr() # Py2: unicode unexpected; Py3: bytes unexp.
def write_py_source_to_f(self, f):
self._f = f
@@ -443,7 +441,7 @@
"ffi inside a Python-based ffi")
prnt('from %s import ffi as _ffi%d' % (included_module_name, i))
prnt()
- prnt("ffi = _cffi_backend.FFI(%s," % (self._to_py(self.module_name),))
+ prnt("ffi = _cffi_backend.FFI('%s'," % (self.module_name,))
#
# the '_types' keyword argument
self.cffi_types = tuple(self.cffi_types) # don't change any more
diff --git a/testing/cffi1/test_dlopen.py b/testing/cffi1/test_dlopen.py
--- a/testing/cffi1/test_dlopen.py
+++ b/testing/cffi1/test_dlopen.py
@@ -8,11 +8,11 @@
ffi = FFI()
ffi.cdef("int close(int); static const int BB = 42; int somevar;")
target = udir.join('test_simple.py')
- assert make_py_source(ffi, 'test_simple', str(target))
+ make_py_source(ffi, 'test_simple', str(target))
assert target.read() == r"""# auto-generated file
import _cffi_backend
-ffi = _cffi_backend.FFI(b'test_simple',
+ffi = _cffi_backend.FFI('test_simple',
_types = b'\x00\x00\x01\x0D\x00\x00\x07\x01\x00\x00\x00\x0F',
_globals = (b'\xFF\xFF\xFF\x1FBB',42,b'\x00\x00\x00\x23close',0,b'\x00\x00\x01\x21somevar',0),
)
@@ -61,11 +61,11 @@
ffi = FFI()
ffi.cdef("typedef int foobar_t;")
target = udir.join('test_typename.py')
- assert make_py_source(ffi, 'test_typename', str(target))
+ make_py_source(ffi, 'test_typename', str(target))
assert target.read() == r"""# auto-generated file
import _cffi_backend
-ffi = _cffi_backend.FFI(b'test_typename',
+ffi = _cffi_backend.FFI('test_typename',
_types = b'\x00\x00\x07\x01',
_typenames = (b'\x00\x00\x00\x00foobar_t',),
)
@@ -75,11 +75,11 @@
ffi = FFI()
ffi.cdef("enum myenum_e { AA, BB, CC=-42 };")
target = udir.join('test_enum.py')
- assert make_py_source(ffi, 'test_enum', str(target))
+ make_py_source(ffi, 'test_enum', str(target))
assert target.read() == r"""# auto-generated file
import _cffi_backend
-ffi = _cffi_backend.FFI(b'test_enum',
+ffi = _cffi_backend.FFI('test_enum',
_types = b'\x00\x00\x00\x0B',
_globals = (b'\xFF\xFF\xFF\x0BAA',0,b'\xFF\xFF\xFF\x0BBB',1,b'\xFF\xFF\xFF\x0BCC',-42),
_enums = (b'\x00\x00\x00\x00\x00\x00\x00\x15myenum_e\x00AA,BB,CC',),
@@ -90,11 +90,11 @@
ffi = FFI()
ffi.cdef("struct foo_s { int a; signed char b[]; }; struct bar_s;")
target = udir.join('test_struct.py')
- assert make_py_source(ffi, 'test_struct', str(target))
+ make_py_source(ffi, 'test_struct', str(target))
assert target.read() == r"""# auto-generated file
import _cffi_backend
-ffi = _cffi_backend.FFI(b'test_struct',
+ffi = _cffi_backend.FFI('test_struct',
_types = b'\x00\x00\x07\x01\x00\x00\x03\x01\x00\x00\x01\x07\x00\x00\x00\x09\x00\x00\x01\x09',
_struct_unions = ((b'\x00\x00\x00\x03\x00\x00\x00\x10bar_s',),(b'\x00\x00\x00\x04\x00\x00\x00\x02foo_s',b'\x00\x00\x00\x11a',b'\x00\x00\x02\x11b')),
)
@@ -105,11 +105,11 @@
ffi.cdef("#define ABC 123")
ffi.set_source('test_include', None)
target = udir.join('test_include.py')
- assert make_py_source(ffi, 'test_include', str(target))
+ make_py_source(ffi, 'test_include', str(target))
assert target.read() == r"""# auto-generated file
import _cffi_backend
-ffi = _cffi_backend.FFI(b'test_include',
+ffi = _cffi_backend.FFI('test_include',
_types = b'',
_globals = (b'\xFF\xFF\xFF\x1FABC',123,),
)
@@ -118,12 +118,12 @@
ffi2 = FFI()
ffi2.include(ffi)
target2 = udir.join('test2_include.py')
- assert make_py_source(ffi2, 'test2_include', str(target2))
+ make_py_source(ffi2, 'test2_include', str(target2))
assert target2.read() == r"""# auto-generated file
import _cffi_backend
from test_include import ffi as _ffi0
-ffi = _cffi_backend.FFI(b'test2_include',
+ffi = _cffi_backend.FFI('test2_include',
_types = b'',
_includes = (_ffi0,),
)
@@ -133,11 +133,11 @@
ffi = FFI()
ffi.cdef("static const int BB = -42;")
target = udir.join('test_negative_constant.py')
- assert make_py_source(ffi, 'test_negative_constant', str(target))
+ make_py_source(ffi, 'test_negative_constant', str(target))
assert target.read() == r"""# auto-generated file
import _cffi_backend
-ffi = _cffi_backend.FFI(b'test_negative_constant',
+ffi = _cffi_backend.FFI('test_negative_constant',
_types = b'',
_globals = (b'\xFF\xFF\xFF\x1FBB',-42,),
)
@@ -151,12 +151,12 @@
ffi = FFI()
ffi.include(baseffi)
target = udir.join('test_struct_included.py')
- assert make_py_source(ffi, 'test_struct_included', str(target))
+ make_py_source(ffi, 'test_struct_included', str(target))
assert target.read() == r"""# auto-generated file
import _cffi_backend
from test_struct_included_base import ffi as _ffi0
-ffi = _cffi_backend.FFI(b'test_struct_included',
+ffi = _cffi_backend.FFI('test_struct_included',
_types = b'\x00\x00\x00\x09',
_struct_unions = ((b'\x00\x00\x00\x00\x00\x00\x00\x08foo_s',),),
_includes = (_ffi0,),
@@ -177,11 +177,11 @@
ffi = FFI()
ffi.cdef("typedef int32_t my_array_t[42];")
target = udir.join('test_array.py')
- assert make_py_source(ffi, 'test_array', str(target))
+ make_py_source(ffi, 'test_array', str(target))
assert target.read() == r"""# auto-generated file
import _cffi_backend
-ffi = _cffi_backend.FFI(b'test_array',
+ffi = _cffi_backend.FFI('test_array',
_types = b'\x00\x00\x15\x01\x00\x00\x00\x05\x00\x00\x00\x2A',
_typenames = (b'\x00\x00\x00\x01my_array_t',),
)
@@ -198,11 +198,11 @@
ffi = FFI()
ffi.cdef("int myglob;")
target = udir.join('test_global_var.py')
- assert make_py_source(ffi, 'test_global_var', str(target))
+ make_py_source(ffi, 'test_global_var', str(target))
assert target.read() == r"""# auto-generated file
import _cffi_backend
-ffi = _cffi_backend.FFI(b'test_global_var',
+ffi = _cffi_backend.FFI('test_global_var',
_types = b'\x00\x00\x07\x01',
_globals = (b'\x00\x00\x00\x21myglob',0,),
)
diff --git a/testing/cffi1/test_dlopen_unicode_literals.py b/testing/cffi1/test_dlopen_unicode_literals.py
new file mode 100644
--- /dev/null
+++ b/testing/cffi1/test_dlopen_unicode_literals.py
@@ -0,0 +1,9 @@
+import py, os
+
+s = """from __future__ import unicode_literals
+"""
+
+with open(os.path.join(os.path.dirname(__file__), 'test_dlopen.py')) as f:
+ s += f.read()
+
+exec(py.code.compile(s))
diff --git a/testing/cffi1/test_re_python.py b/testing/cffi1/test_re_python.py
--- a/testing/cffi1/test_re_python.py
+++ b/testing/cffi1/test_re_python.py
@@ -85,8 +85,8 @@
def test_nonopaque_struct():
from re_python_pysrc import ffi
- for p in [ffi.new("struct bar_s *", [5, "foobar"]),
- ffi.new("bar_t *", [5, "foobar"])]:
+ for p in [ffi.new("struct bar_s *", [5, b"foobar"]),
+ ffi.new("bar_t *", [5, b"foobar"])]:
assert p.x == 5
assert p.a[0] == ord('f')
assert p.a[5] == ord('r')
@@ -115,7 +115,7 @@
assert lib.FOOBAZ == -43
assert lib.k2 == 121212
#
- p = ffi.new("bar_t *", [5, "foobar"])
+ p = ffi.new("bar_t *", [5, b"foobar"])
assert p.a[4] == ord('a')
def test_global_var():
More information about the pypy-commit
mailing list