[pypy-svn] r71354 - pypy/branch/debug-vref2/pypy/jit/metainterp

arigo at codespeak.net arigo at codespeak.net
Sat Feb 20 09:59:42 CET 2010


Author: arigo
Date: Sat Feb 20 09:59:40 2010
New Revision: 71354

Modified:
   pypy/branch/debug-vref2/pypy/jit/metainterp/optimizeopt.py
   pypy/branch/debug-vref2/pypy/jit/metainterp/virtualref.py
Log:
Don't use 0 at all for TOKEN_*.  May help distinguishing
uninitialized from initialized-to-TOKEN_NONE cases.


Modified: pypy/branch/debug-vref2/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- pypy/branch/debug-vref2/pypy/jit/metainterp/optimizeopt.py	(original)
+++ pypy/branch/debug-vref2/pypy/jit/metainterp/optimizeopt.py	Sat Feb 20 09:59:40 2010
@@ -800,7 +800,7 @@
                           descr = vrefinfo.descr_forced)
         self.optimize_SETFIELD_GC(op1)
         # - set 'virtual_token' to TOKEN_NONE
-        args = [op.args[0], ConstInt(0)]
+        args = [op.args[0], ConstInt(vrefinfo.TOKEN_NONE)]
         op1 = ResOperation(rop.SETFIELD_GC, args, None,
                       descr = vrefinfo.descr_virtual_token)
         self.optimize_SETFIELD_GC(op1)

Modified: pypy/branch/debug-vref2/pypy/jit/metainterp/virtualref.py
==============================================================================
--- pypy/branch/debug-vref2/pypy/jit/metainterp/virtualref.py	(original)
+++ pypy/branch/debug-vref2/pypy/jit/metainterp/virtualref.py	Sat Feb 20 09:59:40 2010
@@ -59,11 +59,11 @@
 
     # The 'virtual_token' field has the same meaning as the 'vable_token' field
     # of a virtualizable.  It is equal to:
-    #  * 0 (TOKEN_NONE) when tracing, except as described below;
+    #  * -2 (TOKEN_NONE) when tracing, except as described below;
     #  * -1 (TOKEN_TRACING_RESCALL) during tracing when we do a residual call;
     #  * addr in the CPU stack (set by FORCE_TOKEN) when running the assembler;
-    #  * 0 (TOKEN_NONE) after the virtual is forced, if it is forced at all.
-    TOKEN_NONE            = 0
+    #  * -2 (TOKEN_NONE) after the virtual is forced, if it is forced at all.
+    TOKEN_NONE            = -2
     TOKEN_TRACING_RESCALL = -1
 
     def virtual_ref_during_tracing(self, real_object):
@@ -85,7 +85,7 @@
         if not self.is_virtual_ref(gcref):
             return
         vref = lltype.cast_opaque_ptr(lltype.Ptr(self.JIT_VIRTUAL_REF), gcref)
-        assert not vref.virtual_token
+        assert vref.virtual_token == self.TOKEN_NONE
         vref.virtual_token = self.TOKEN_TRACING_RESCALL
 
     def tracing_after_residual_call(self, gcref):
@@ -93,7 +93,7 @@
             return False
         vref = lltype.cast_opaque_ptr(lltype.Ptr(self.JIT_VIRTUAL_REF), gcref)
         assert vref.forced
-        if vref.virtual_token:
+        if vref.virtual_token != self.TOKEN_NONE:
             # not modified by the residual call; assert that it is still
             # set to TOKEN_TRACING_RESCALL and clear it.
             assert vref.virtual_token == self.TOKEN_TRACING_RESCALL



More information about the Pypy-commit mailing list