Author: Alex Gaynor <alex.gay...@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 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit