[pypy-commit] pypy cffi-1.0: test_include_1

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


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

Log:	test_include_1

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
@@ -230,4 +230,9 @@
         ffi.ctxobj.ctx.c_typenames = ntypenames
         rffi.setintfield(ffi.ctxobj.ctx, 'c_num_typenames', n)
 
-    # ... XXXX
+    if w_includes:
+        from pypy.module._cffi_backend.ffi_obj import W_FFIObject
+        #
+        for w_parent_ffi in space.fixedview(w_includes):
+            parent_ffi = space.interp_w(W_FFIObject, w_parent_ffi)
+            ffi.included_ffis_libs.append((parent_ffi, None))
diff --git a/pypy/module/_cffi_backend/ffi_obj.py b/pypy/module/_cffi_backend/ffi_obj.py
--- a/pypy/module/_cffi_backend/ffi_obj.py
+++ b/pypy/module/_cffi_backend/ffi_obj.py
@@ -78,7 +78,7 @@
                         "object", name)
 
         for ffi1, _ in self.included_ffis_libs:
-            w_result = ffi1.ffi_fetch_int_constant(name)
+            w_result = ffi1.fetch_int_constant(name)
             if w_result is not None:
                 return w_result
         return None
diff --git a/pypy/module/_cffi_backend/test/test_re_python.py b/pypy/module/_cffi_backend/test/test_re_python.py
--- a/pypy/module/_cffi_backend/test/test_re_python.py
+++ b/pypy/module/_cffi_backend/test/test_re_python.py
@@ -53,7 +53,14 @@
         """)
         ffi.set_source('re_python_pysrc', None)
         ffi.emit_python_code(str(tmpdir.join('re_python_pysrc.py')))
-        #mod.original_ffi = ffi
+        #
+        sub_ffi = FFI()
+        sub_ffi.cdef("static const int k2 = 121212;")
+        sub_ffi.include(ffi)
+        assert 'macro FOOBAR' in ffi._parser._declarations
+        assert 'macro FOOBAZ' in ffi._parser._declarations
+        sub_ffi.set_source('re_py_subsrc', None)
+        sub_ffi.emit_python_code(str(tmpdir.join('re_py_subsrc.py')))
         #
         space.appexec([space.wrap(str(tmpdir))], """(path):
             import _cffi_backend     # force it to be initialized
@@ -64,10 +71,9 @@
     def teardown_method(self, meth):
         self.space.appexec([], """():
             import sys
-            try:
-                del sys.modules['re_python_pysrc']
-            except KeyError:
-                pass
+            for name in ['re_py_subsrc', 're_python_pysrc']:
+                if name in sys.modules:
+                    del sys.modules[name]
         """)
         _clean_cache(self.space)
 
@@ -124,15 +130,7 @@
         assert ffi.string(e) == "CC"
 
     def test_include_1(self):
-        sub_ffi = FFI()
-        sub_ffi.cdef("static const int k2 = 121212;")
-        sub_ffi.include(original_ffi)
-        assert 'macro FOOBAR' in original_ffi._parser._declarations
-        assert 'macro FOOBAZ' in original_ffi._parser._declarations
-        sub_ffi.set_source('re_python_pysrc', None)
-        sub_ffi.emit_python_code(str(tmpdir.join('_re_include_1.py')))
-        #
-        from _re_include_1 import ffi
+        from re_py_subsrc import ffi
         assert ffi.integer_const('FOOBAR') == -42
         assert ffi.integer_const('FOOBAZ') == -43
         assert ffi.integer_const('k2') == 121212


More information about the pypy-commit mailing list