[pypy-commit] pypy virtual-dicts: next test that I need to pass. for virtual dicts to be useful in python they need to work through opaque pointers, which are used by dictmultiobject
alex_gaynor
noreply at buildbot.pypy.org
Tue Oct 25 06:21:55 CEST 2011
Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch: virtual-dicts
Changeset: r48405:fd60bd44e563
Date: 2011-10-25 00:21 -0400
http://bitbucket.org/pypy/pypy/changeset/fd60bd44e563/
Log: next test that I need to pass. for virtual dicts to be useful in
python they need to work through opaque pointers, which are used by
dictmultiobject
diff --git a/pypy/jit/metainterp/heapcache.py b/pypy/jit/metainterp/heapcache.py
--- a/pypy/jit/metainterp/heapcache.py
+++ b/pypy/jit/metainterp/heapcache.py
@@ -34,7 +34,6 @@
self.clear_caches(opnum, descr, argboxes)
def mark_escaped(self, opnum, argboxes):
- idx = 0
if opnum == rop.SETFIELD_GC:
assert len(argboxes) == 2
box, valuebox = argboxes
@@ -44,6 +43,7 @@
self._escape(valuebox)
# GETFIELD_GC doesn't escape it's argument
elif opnum != rop.GETFIELD_GC:
+ idx = 0
for box in argboxes:
# setarrayitem_gc don't escape its first argument
if not (idx == 0 and opnum in [rop.SETARRAYITEM_GC]):
diff --git a/pypy/jit/metainterp/test/test_ajit.py b/pypy/jit/metainterp/test/test_ajit.py
--- a/pypy/jit/metainterp/test/test_ajit.py
+++ b/pypy/jit/metainterp/test/test_ajit.py
@@ -10,6 +10,7 @@
from pypy.jit.metainterp.typesystem import LLTypeHelper, OOTypeHelper
from pypy.jit.metainterp.warmspot import get_stats
from pypy.jit.metainterp.warmstate import set_future_value
+from pypy.rlib import rerased
from pypy.rlib.jit import (JitDriver, we_are_jitted, hint, dont_look_inside,
loop_invariant, elidable, promote, jit_debug, assert_green,
AssertGreenFailed, unroll_safe, current_trace_length, look_inside_iff,
@@ -3519,6 +3520,25 @@
assert res == 0
self.check_loops({"int_sub": 1, "int_gt": 1, "guard_true": 1, "jump": 1})
+ def test_virtual_opaque_ptr(self):
+ myjitdriver = JitDriver(greens = [], reds=["n"])
+ erase, unerase = rerased.new_erasing_pair("x")
+ @look_inside_iff(lambda x: isvirtual(x))
+ def g(x):
+ return x[0]
+ def f(n):
+ while n > 0:
+ myjitdriver.jit_merge_point(n=n)
+ x = []
+ y = erase(x)
+ z = unerase(y)
+ z.append(1)
+ n -= g(z)
+ return n
+ res = self.meta_interp(f, [10])
+ assert res == 0
+ self.check_loops({"int_sub": 1, "int_gt": 1, "guard_true": 1, "jump": 1})
+
class TestLLtype(BaseLLtypeTests, LLJitMixin):
def test_tagged(self):
@@ -3575,8 +3595,7 @@
res = self.meta_interp(main, [False, 100, True], taggedpointers=True)
def test_rerased(self):
- from pypy.rlib.rerased import erase_int, unerase_int, new_erasing_pair
- eraseX, uneraseX = new_erasing_pair("X")
+ eraseX, uneraseX = rerased,new_erasing_pair("X")
#
class X:
def __init__(self, a, b):
@@ -3589,14 +3608,14 @@
e = eraseX(X(i, j))
else:
try:
- e = erase_int(i)
+ e = rerased.erase_int(i)
except OverflowError:
return -42
if j & 1:
x = uneraseX(e)
return x.a - x.b
else:
- return unerase_int(e)
+ return rerased.unerase_int(e)
#
x = self.interp_operations(f, [-128, 0], taggedpointers=True)
assert x == -128
More information about the pypy-commit
mailing list