[pypy-commit] pypy default: issue #1983: test and fix
arigo
noreply at buildbot.pypy.org
Sat Feb 14 11:18:07 CET 2015
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r75863:bc0fa15c04e1
Date: 2015-02-14 11:18 +0100
http://bitbucket.org/pypy/pypy/changeset/bc0fa15c04e1/
Log: issue #1983: test and fix
diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -790,7 +790,8 @@
eqbox = self.implement_guard_value(eqbox, pc)
isstandard = eqbox.getint()
if isstandard:
- self.metainterp.replace_box(box, standard_box)
+ if isinstance(box, history.BoxPtr):
+ self.metainterp.replace_box(box, standard_box)
return False
if not self.metainterp.heapcache.is_unescaped(box):
self.emit_force_virtualizable(fielddescr, box)
diff --git a/rpython/jit/metainterp/test/test_virtualizable.py b/rpython/jit/metainterp/test/test_virtualizable.py
--- a/rpython/jit/metainterp/test/test_virtualizable.py
+++ b/rpython/jit/metainterp/test/test_virtualizable.py
@@ -1682,6 +1682,25 @@
res = self.meta_interp(f, [], listops=True)
assert res == 0
+ def test_constant_virtualizable(self):
+ class A:
+ _virtualizable_ = ['x']
+ def __init__(self, x):
+ self.x = x
+
+ driver = JitDriver(greens=['b'], reds=['a'], virtualizables=['a'])
+
+ def f():
+ a = A(10)
+ b = promote(a)
+ while a.x > 0:
+ driver.jit_merge_point(a=a, b=b)
+ a.x = b.x - 1
+ return a.x
+
+ res = self.meta_interp(f, [], listops=True)
+ assert res == 0
+
class TestLLtype(ExplicitVirtualizableTests,
ImplicitVirtualizableTests,
More information about the pypy-commit
mailing list