[pypy-commit] pypy inline-virtualref-2: bring over the test

alex_gaynor noreply at buildbot.pypy.org
Wed Jan 23 14:41:44 CET 2013


Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch: inline-virtualref-2
Changeset: r60371:029788868de3
Date: 2013-01-23 05:15 -0800
http://bitbucket.org/pypy/pypy/changeset/029788868de3/

Log:	bring over the test

diff --git a/rpython/jit/metainterp/test/test_virtualref.py b/rpython/jit/metainterp/test/test_virtualref.py
--- a/rpython/jit/metainterp/test/test_virtualref.py
+++ b/rpython/jit/metainterp/test/test_virtualref.py
@@ -1,19 +1,20 @@
 import py
-from rpython.rtyper.lltypesystem import lltype, llmemory, lloperation
+
+from rpython.rtyper.lltypesystem import lltype, lloperation
 from rpython.rtyper.exceptiondata import UnknownException
 from rpython.rlib.jit import JitDriver, dont_look_inside, vref_None
 from rpython.rlib.jit import virtual_ref, virtual_ref_finish, InvalidVirtualRef
 from rpython.rlib.jit import non_virtual_ref
 from rpython.rlib.objectmodel import compute_unique_id
-from rpython.jit.metainterp.test.support import LLJitMixin, OOJitMixin, _get_jitcodes
+from rpython.jit.metainterp.test.support import LLJitMixin, _get_jitcodes
 from rpython.jit.metainterp.resoperation import rop
 from rpython.jit.metainterp.virtualref import VirtualRefInfo
 
+
 debug_print = lloperation.llop.debug_print
 
 
-class VRefTests:
-
+class VRefTests(object):
     def finish_setup_for_interp_operations(self):
         self.vrefinfo = VirtualRefInfo(self.warmrunnerstate)
         self.cw.setup_vrefinfo(self.vrefinfo)
@@ -115,8 +116,8 @@
         from rpython.jit.metainterp.resume import ResumeDataDirectReader
         cpu = self.metainterp.cpu
         cpu.get_latest_value_count = lambda df: len(guard_op.getfailargs())
-        cpu.get_latest_value_int = lambda df,i:guard_op.getfailargs()[i].getint()
-        cpu.get_latest_value_ref = lambda df,i:guard_op.getfailargs()[i].getref_base()
+        cpu.get_latest_value_int = lambda df, i: guard_op.getfailargs()[i].getint()
+        cpu.get_latest_value_ref = lambda df, i: guard_op.getfailargs()[i].getref_base()
         cpu.clear_latest_values = lambda count: None
         class FakeMetaInterpSd:
             callinfocollection = None
@@ -656,6 +657,31 @@
         res = self.meta_interp(f, [10])
         assert res == 0
 
+    def test_force_virtual_vref(self):
+        myjitdriver = JitDriver(greens=[], reds=['n', 'ec'])
+
+        class ExecutionContext(object):
+            pass
+
+        class Frame(object):
+            def __init__(self, x):
+                self.x = x
+
+        def f(n):
+            ec = ExecutionContext()
+            while n > 0:
+                myjitdriver.jit_merge_point(n=n, ec=ec)
+                frame = Frame(1)
+                ec.topframeref = virtual_ref(frame)
+                n -= ec.topframeref().x
+                frame_vref = ec.topframeref
+                ec.topframeref = vref_None
+                virtual_ref_finish(frame_vref, frame)
+            return n
+        res = self.meta_interp(f, [10])
+        assert res == 0
+        self.check_resops({'int_sub': 1, 'int_gt': 1, 'jump': 1})
+
 
 class TestLLtype(VRefTests, LLJitMixin):
     pass


More information about the pypy-commit mailing list