[pypy-svn] r69925 - pypy/branch/virtual-forcing/pypy/jit/metainterp

arigo at codespeak.net arigo at codespeak.net
Sun Dec 6 18:12:20 CET 2009


Author: arigo
Date: Sun Dec  6 18:12:19 2009
New Revision: 69925

Modified:
   pypy/branch/virtual-forcing/pypy/jit/metainterp/compile.py
   pypy/branch/virtual-forcing/pypy/jit/metainterp/virtualizable.py
Log:
Fix the handling of virtualizables.


Modified: pypy/branch/virtual-forcing/pypy/jit/metainterp/compile.py
==============================================================================
--- pypy/branch/virtual-forcing/pypy/jit/metainterp/compile.py	(original)
+++ pypy/branch/virtual-forcing/pypy/jit/metainterp/compile.py	Sun Dec  6 18:12:19 2009
@@ -276,8 +276,7 @@
             forced_single_vref(vrefbox.getref_base(), virtualbox.getref_base())
         # Handle virtualizable_boxes: store them on the real virtualizable now
         if expect_virtualizable:
-            metainterp.virtualizable_boxes = virtualizable_boxes
-            metainterp.synchronize_virtualizable()
+            metainterp_sd.virtualizable_info.forced_vable(virtualizable_boxes)
         # Handle all_virtuals: keep them for later blackholing from the
         # future failure of the GUARD_NOT_FORCED
         self.save_data(force_token, all_virtuals)

Modified: pypy/branch/virtual-forcing/pypy/jit/metainterp/virtualizable.py
==============================================================================
--- pypy/branch/virtual-forcing/pypy/jit/metainterp/virtualizable.py	(original)
+++ pypy/branch/virtual-forcing/pypy/jit/metainterp/virtualizable.py	Sun Dec  6 18:12:19 2009
@@ -200,7 +200,8 @@
             return True
 
     def force_now(self, virtualizable):
-        if virtualizable.vable_token == self.TOKEN_TRACING:
+        token = virtualizable.vable_token
+        if token == self.TOKEN_TRACING:
             # The values in the virtualizable are always correct during
             # tracing.  We only need to reset vable_token to TOKEN_NONE
             # as a marker for the tracing, to tell it that this
@@ -212,6 +213,12 @@
             assert virtualizable.vable_token == self.TOKEN_NONE
     force_now._dont_inline_ = True
 
+    def forced_vable(self, virtualizable_boxes):
+        virtualizable_box = virtualizable_boxes[-1]
+        virtualizable = self.unwrap_virtualizable_box(virtualizable_box)
+        self.write_boxes(virtualizable, virtualizable_boxes)
+        virtualizable.vable_token = self.TOKEN_NONE
+
 # ____________________________________________________________
 #
 # The 'vable_token' field of a virtualizable is either 0, -1, or points



More information about the Pypy-commit mailing list