[pypy-svn] r69896 - in pypy/branch/virtual-forcing/pypy/rlib: . test

arigo at codespeak.net arigo at codespeak.net
Fri Dec 4 15:57:19 CET 2009


Author: arigo
Date: Fri Dec  4 15:57:18 2009
New Revision: 69896

Modified:
   pypy/branch/virtual-forcing/pypy/rlib/jit.py
   pypy/branch/virtual-forcing/pypy/rlib/test/test__jit_vref.py
Log:
Using this function may help during debugging.


Modified: pypy/branch/virtual-forcing/pypy/rlib/jit.py
==============================================================================
--- pypy/branch/virtual-forcing/pypy/rlib/jit.py	(original)
+++ pypy/branch/virtual-forcing/pypy/rlib/jit.py	Fri Dec  4 15:57:18 2009
@@ -1,7 +1,7 @@
 import py
 import sys
 from pypy.rpython.extregistry import ExtRegistryEntry
-from pypy.rlib.objectmodel import CDefinedIntSymbolic
+from pypy.rlib.objectmodel import CDefinedIntSymbolic, we_are_translated
 from pypy.rlib.unroll import unrolling_iterable
 
 def purefunction(func):
@@ -105,10 +105,17 @@
     return DirectVRef(x)
 virtual_ref.oopspec = 'virtual_ref(x)'
 
+def virtual_ref_finish(x):
+    if not we_are_translated():
+        x._forced = x._forced or -1
+
 class DirectVRef(object):
+    _forced = 0
     def __init__(self, x):
         self._x = x
     def __call__(self):
+        assert self._forced >= 0, "too late to force the virtual_ref!"
+        self._forced = 1
         return self._x
     def _freeze_(self):
         raise Exception("should not see a prebuilt virtual_ref")

Modified: pypy/branch/virtual-forcing/pypy/rlib/test/test__jit_vref.py
==============================================================================
--- pypy/branch/virtual-forcing/pypy/rlib/test/test__jit_vref.py	(original)
+++ pypy/branch/virtual-forcing/pypy/rlib/test/test__jit_vref.py	Fri Dec  4 15:57:18 2009
@@ -1,4 +1,5 @@
-from pypy.rlib.jit import virtual_ref
+import py
+from pypy.rlib.jit import virtual_ref, virtual_ref_finish
 from pypy.rlib._jit_vref import SomeVRef
 from pypy.annotation import model as annmodel
 from pypy.annotation.annrpython import RPythonAnnotator
@@ -22,6 +23,17 @@
     vref = virtual_ref(x1)
     assert vref() is x1
 
+def test_finish():
+    vref = virtual_ref(X())
+    virtual_ref_finish(vref)
+    py.test.raises(AssertionError, "vref()")
+    #
+    x1 = X()
+    vref = virtual_ref(x1)
+    assert vref() is x1
+    virtual_ref_finish(vref)
+    assert vref() is x1
+
 def test_annotate_1():
     def f():
         return virtual_ref(X())



More information about the Pypy-commit mailing list