[pypy-svn] r67704 - pypy/branch/asmgcroot-callback/pypy/translator/c/gcc/test

arigo at codespeak.net arigo at codespeak.net
Tue Sep 15 20:27:05 CEST 2009


Author: arigo
Date: Tue Sep 15 20:27:02 2009
New Revision: 67704

Modified:
   pypy/branch/asmgcroot-callback/pypy/translator/c/gcc/test/test_asmgcroot.py
Log:
Add a test.  Passing, annoyingly.


Modified: pypy/branch/asmgcroot-callback/pypy/translator/c/gcc/test/test_asmgcroot.py
==============================================================================
--- pypy/branch/asmgcroot-callback/pypy/translator/c/gcc/test/test_asmgcroot.py	(original)
+++ pypy/branch/asmgcroot-callback/pypy/translator/c/gcc/test/test_asmgcroot.py	Tue Sep 15 20:27:02 2009
@@ -95,5 +95,37 @@
     # for the individual tests see
     # ====> ../../test/test_newgc.py
 
+    def test_callback_simple(self):
+        import gc
+        from pypy.rpython.lltypesystem import lltype, rffi
+        from pypy.rpython.annlowlevel import llhelper
+        from pypy.translator.tool.cbuild import ExternalCompilationInfo
+
+        c_source = py.code.Source("""
+        int mystuff(int(*cb)(int, int))
+        {
+            return cb(40, 2);
+        }
+        """)
+        eci = ExternalCompilationInfo(separate_module_sources=[c_source])
+        S = lltype.GcStruct('S', ('x', lltype.Signed))
+        CALLBACK = lltype.FuncType([lltype.Signed, lltype.Signed],
+                                   lltype.Signed)
+        z = rffi.llexternal('mystuff', [lltype.Ptr(CALLBACK)], lltype.Signed,
+                            compilation_info=eci)
+
+        def mycallback(a, b):
+            gc.collect()
+            return a + b
+
+        def f():
+            p = lltype.malloc(S)
+            p.x = 100
+            result = z(mycallback)
+            return result * p.x
+
+        c_fn = self.getcompiled(f)
+        assert c_fn() == 4200
+
     #def test_callback_with_collect(self):
     #    py.test.skip("in-progress")



More information about the Pypy-commit mailing list