Author: Hakan Ardo <ha...@debian.org> Branch: jit-short_from_state Changeset: r45171:431d551a6ef3 Date: 2011-06-29 08:27 +0200 http://bitbucket.org/pypy/pypy/changeset/431d551a6ef3/
Log: failing test diff --git a/pypy/jit/metainterp/optimizeopt/virtualstate.py b/pypy/jit/metainterp/optimizeopt/virtualstate.py --- a/pypy/jit/metainterp/optimizeopt/virtualstate.py +++ b/pypy/jit/metainterp/optimizeopt/virtualstate.py @@ -231,7 +231,11 @@ bad[self] = True bad[other] = True return False - return self.intbound.contains_bound(other.intbound) + if not self.intbound.contains_bound(other.intbound): + bad[self] = True + bad[other] = True + return False + return True def _generate_guards(self, other, box, cpu, extra_guards): if not isinstance(other, NotVirtualStateInfo): diff --git a/pypy/jit/metainterp/test/test_virtual.py b/pypy/jit/metainterp/test/test_virtual.py --- a/pypy/jit/metainterp/test/test_virtual.py +++ b/pypy/jit/metainterp/test/test_virtual.py @@ -898,6 +898,29 @@ res = self.meta_interp(f, [], repeat=7) assert res == f() + def test_virtual_attribute_pure_function(self): + mydriver = JitDriver(reds = ['i', 'sa', 'n', 'node'], greens = []) + class A(object): + def __init__(self, v1, v2): + self.v1 = v1 + self.v2 = v2 + def f(n): + i = sa = 0 + node = A(1, 2) + while i < n: + mydriver.jit_merge_point(i=i, sa=sa, n=n, node=node) + sa += node.v1 + node.v2 + 2*node.v1 + if i < n/2: + node = A(n, 2*n) + else: + node = A(n, 3*n) + i += 1 + return sa + + res = self.meta_interp(f, [16]) + assert res == f(16) + + # ____________________________________________________________ # Run 1: all the tests instantiate a real RPython class _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit