[pypy-svn] r70724 - in pypy/branch/direct-assembler-call/pypy/jit/metainterp: . test

fijal at codespeak.net fijal at codespeak.net
Wed Jan 20 12:42:32 CET 2010


Author: fijal
Date: Wed Jan 20 12:42:32 2010
New Revision: 70724

Modified:
   pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_warmspot.py
   pypy/branch/direct-assembler-call/pypy/jit/metainterp/warmspot.py
Log:
(pedronis, fijal) Directly test assembler_call_helper


Modified: pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_warmspot.py
==============================================================================
--- pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_warmspot.py	(original)
+++ pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_warmspot.py	Wed Jan 20 12:42:32 2010
@@ -4,6 +4,7 @@
 from pypy.rlib.jit import JitDriver, OPTIMIZER_FULL, OPTIMIZER_SIMPLE
 from pypy.rlib.jit import unroll_safe
 from pypy.jit.backend.llgraph import runner
+from pypy.jit.metainterp.history import BoxInt
 
 from pypy.jit.metainterp.test.test_basic import LLJitMixin, OOJitMixin
 
@@ -283,3 +284,80 @@
 class TestOOWarmspot(WarmspotTests, OOJitMixin):
     CPUClass = runner.OOtypeCPU
     type_system = 'ootype'
+
+class TestWarmspotDirect(object):
+    def setup_class(cls):
+        from pypy.jit.metainterp.typesystem import llhelper
+        from pypy.jit.metainterp.support import annotate
+        from pypy.jit.metainterp.warmspot import WarmRunnerDesc
+        from pypy.rpython.lltypesystem.rclass import OBJECT, OBJECT_VTABLE
+        from pypy.rpython.lltypesystem import lltype, llmemory
+        exc_vtable = lltype.malloc(OBJECT_VTABLE, immortal=True)
+        cls.exc_vtable = exc_vtable
+
+        class FakeFailDescr(object):
+            def __init__(self, no):
+                self.no = no
+            
+            def handle_fail(self, metainterp_sd):
+                if self.no == 0:
+                    raise metainterp_sd.warmrunnerdesc.DoneWithThisFrameInt(3)
+                if self.no == 1:
+                    raise metainterp_sd.warmrunnerdesc.ContinueRunningNormally(
+                        [BoxInt(0), BoxInt(1)])
+                if self.no == 3:
+                    exc = lltype.malloc(OBJECT)
+                    exc.typeptr = exc_vtable
+                    raise metainterp_sd.warmrunnerdesc.ExitFrameWithExceptionRef(
+                        metainterp_sd.cpu,
+                        lltype.cast_opaque_ptr(llmemory.GCREF, exc))
+                return self.no
+
+        class FakeCPU(object):
+            supports_floats = False
+            ts = llhelper
+            translate_support_code = False
+
+            def __init__(self, *args, **kwds):
+                pass
+
+            def nodescr(self, *args, **kwds):
+                pass
+            fielddescrof = nodescr
+            calldescrof  = nodescr
+            sizeof       = nodescr
+
+            def get_fail_descr_from_number(self, no):
+                return FakeFailDescr(no)
+
+            def execute_token(self, token):
+                assert token == 2
+                return FakeFailDescr(1)
+
+        driver = JitDriver(reds = ['red'], greens = ['green'])
+        
+        def f(green):
+            red = 0
+            while red < 10:
+                driver.can_enter_jit(red=red, green=green)
+                driver.jit_merge_point(red=red, green=green)
+                red += 1
+            return red
+
+        rtyper = annotate(f, [0])
+        translator = rtyper.annotator.translator
+        translator.config.translation.gc = 'hybrid'
+        cls.desc = WarmRunnerDesc(translator, CPUClass=FakeCPU)
+
+    def test_call_helper(self):
+        from pypy.rpython.llinterp import LLException
+        
+        assert self.desc.assembler_call_helper(0) == 3
+        assert self.desc.assembler_call_helper(1) == 10
+        assert self.desc.assembler_call_helper(2) == 10
+        try:
+            self.desc.assembler_call_helper(3)
+        except LLException, lle:
+            assert lle[0] == self.exc_vtable
+        else:
+            py.test.fail("DID NOT RAISE")

Modified: pypy/branch/direct-assembler-call/pypy/jit/metainterp/warmspot.py
==============================================================================
--- pypy/branch/direct-assembler-call/pypy/jit/metainterp/warmspot.py	(original)
+++ pypy/branch/direct-assembler-call/pypy/jit/metainterp/warmspot.py	Wed Jan 20 12:42:32 2010
@@ -140,7 +140,7 @@
 
 # ____________________________________________________________
 
-class WarmRunnerDesc:
+class WarmRunnerDesc(object):
 
     def __init__(self, translator, policy=None, backendopt=True, CPUClass=None,
                  optimizer=None, **kwds):
@@ -557,7 +557,8 @@
                     else:
                         value = cast_base_ptr_to_instance(Exception, value)
                         raise Exception, value
-        
+
+        self.ll_portal_runner = ll_portal_runner # for debugging
         self.portal_runner_ptr = self.helper_func(self.PTR_PORTAL_FUNCTYPE,
                                                   ll_portal_runner)
 
@@ -593,6 +594,7 @@
                         value = cast_base_ptr_to_instance(Exception, value)
                         raise Exception, value
 
+        self.assembler_call_helper = assembler_call_helper # for debugging
         self.cpu.assembler_helper_ptr = self.helper_func(
             self.PTR_ASSEMBLER_HELPER_FUNCTYPE,
             assembler_call_helper)



More information about the Pypy-commit mailing list