[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