Author: Armin Rigo <ar...@tunes.org>
Branch: heapcache-refactor
Changeset: r83100:669fec3af2a8
Date: 2016-03-17 11:38 +0100
http://bitbucket.org/pypy/pypy/changeset/669fec3af2a8/

Log:    test_known_nullity

diff --git a/rpython/jit/metainterp/heapcache.py 
b/rpython/jit/metainterp/heapcache.py
--- a/rpython/jit/metainterp/heapcache.py
+++ b/rpython/jit/metainterp/heapcache.py
@@ -7,6 +7,7 @@
 # RefFrontendOp._heapc_flags:
 HF_LIKELY_VIRTUAL = 0x01
 HF_KNOWN_CLASS    = 0x02
+HF_KNOWN_NULLITY  = 0x04
 
 @always_inline
 def add_flags(ref_frontend_op, flags):
@@ -32,7 +33,6 @@
         self.reset_keep_likely_virtual()
 
     def reset_keep_likely_virtual(self):
-        self.known_nullity = False
         # did we see the allocation during tracing?
         self.seen_allocation = False
         self.is_unescaped = False
@@ -340,13 +340,14 @@
         add_flags(box, HF_KNOWN_CLASS)
 
     def is_nullity_known(self, box):
-        value = self.getvalue(box, create=False)
-        if value:
-            return value.known_nullity
-        return False
+        return (isinstance(box, RefFrontendOp) and
+                    self.test_head_version(box) and
+                    test_flags(box, HF_KNOWN_NULLITY))
 
     def nullity_now_known(self, box):
-        self.getvalue(box).known_nullity = True
+        assert isinstance(box, RefFrontendOp)
+        self.update_version(box)
+        add_flags(box, HF_KNOWN_NULLITY)
 
     def is_nonstandard_virtualizable(self, box):
         value = self.getvalue(box, create=False)
diff --git a/rpython/jit/metainterp/test/test_heapcache.py 
b/rpython/jit/metainterp/test/test_heapcache.py
--- a/rpython/jit/metainterp/test/test_heapcache.py
+++ b/rpython/jit/metainterp/test/test_heapcache.py
@@ -74,15 +74,17 @@
 
     def test_known_nullity(self):
         h = HeapCache()
-        assert not h.is_nullity_known(1)
-        assert not h.is_nullity_known(2)
-        h.nullity_now_known(1)
-        assert h.is_nullity_known(1)
-        assert not h.is_nullity_known(2)
+        box1 = RefFrontendOp(1)
+        box2 = RefFrontendOp(2)
+        assert not h.is_nullity_known(box1)
+        assert not h.is_nullity_known(box2)
+        h.nullity_now_known(box1)
+        assert h.is_nullity_known(box1)
+        assert not h.is_nullity_known(box2)
 
         h.reset()
-        assert not h.is_nullity_known(1)
-        assert not h.is_nullity_known(2)
+        assert not h.is_nullity_known(box1)
+        assert not h.is_nullity_known(box2)
 
 
     def test_nonstandard_virtualizable(self):
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to