Author: Armin Rigo <[email protected]>
Branch:
Changeset: r49655:0261999420cf
Date: 2011-11-22 10:41 +0100
http://bitbucket.org/pypy/pypy/changeset/0261999420cf/
Log: Test for the case of really two distinct constant immutable objects
pointing to each other. (works)
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -5568,6 +5568,35 @@
jump()
"""
self.optimize_loop(ops, expected)
+ #
+ ops = """
+ []
+ p0 = new_with_vtable(ConstClass(ptrobj_immut_vtable))
+ p1 = new_with_vtable(ConstClass(ptrobj_immut_vtable))
+ setfield_gc(p0, p1, descr=immut_ptrval)
+ setfield_gc(p1, p0, descr=immut_ptrval)
+ escape(p0)
+ jump()
+ """
+ class PtrObjSelf2(object):
+ _TYPE = llmemory.GCREF.TO
+ def __eq__(slf, other):
+ if slf is other:
+ return 1
+ p1 = other.container.ptrval
+ p1cast = lltype.cast_pointer(lltype.Ptr(self.PTROBJ_IMMUT), p1)
+ p2 = p1cast.ptrval
+ assert p2 != p1
+ p2cast = lltype.cast_pointer(lltype.Ptr(self.PTROBJ_IMMUT), p2)
+ return p2cast.ptrval == p1
+ self.namespace['ptrobjself2'] = lltype._ptr(llmemory.GCREF,
+ PtrObjSelf2())
+ expected = """
+ []
+ escape(ConstPtr(ptrobjself2))
+ jump()
+ """
+ self.optimize_loop(ops, expected)
# ----------
def optimize_strunicode_loop(self, ops, optops, preamble):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit