Author: Armin Rigo <[email protected]>
Branch: remove-globals-in-jit
Changeset: r58897:04d38910e86b
Date: 2012-11-14 16:48 +0100
http://bitbucket.org/pypy/pypy/changeset/04d38910e86b/
Log: fix fix
diff --git a/pypy/jit/metainterp/blackhole.py b/pypy/jit/metainterp/blackhole.py
--- a/pypy/jit/metainterp/blackhole.py
+++ b/pypy/jit/metainterp/blackhole.py
@@ -1386,7 +1386,8 @@
assert kind == 'v'
return lltype.nullptr(rclass.OBJECTPTR.TO)
- def _prepare_resume_from_failure(self, opnum, dont_change_position=False):
+ def _prepare_resume_from_failure(self, opnum, dont_change_position,
+ deadframe):
from pypy.jit.metainterp.resoperation import rop
#
if opnum == rop.GUARD_TRUE:
@@ -1418,7 +1419,7 @@
opnum == rop.GUARD_EXCEPTION or
opnum == rop.GUARD_NOT_FORCED):
return lltype.cast_opaque_ptr(rclass.OBJECTPTR,
- self.cpu.grab_exc_value())
+ self.cpu.grab_exc_value(deadframe))
#
elif opnum == rop.GUARD_NO_OVERFLOW:
# Produced by int_xxx_ovf(). The pc is just after the opcode.
@@ -1561,7 +1562,7 @@
dont_change_position = False
current_exc = blackholeinterp._prepare_resume_from_failure(
- resumedescr.guard_opnum, dont_change_position)
+ resumedescr.guard_opnum, dont_change_position, deadframe)
_run_forever(blackholeinterp, current_exc)
diff --git a/pypy/jit/metainterp/compile.py b/pypy/jit/metainterp/compile.py
--- a/pypy/jit/metainterp/compile.py
+++ b/pypy/jit/metainterp/compile.py
@@ -430,7 +430,6 @@
assert jitdriver_sd.result_type == history.REF
cpu = metainterp_sd.cpu
result = cpu.get_latest_value_ref(deadframe, 0)
- cpu.clear_latest_values(1)
raise metainterp_sd.DoneWithThisFrameRef(cpu, result)
class DoneWithThisFrameDescrFloat(_DoneWithThisFrameDescr):
@@ -443,7 +442,6 @@
def handle_fail(self, deadframe, metainterp_sd, jitdriver_sd):
cpu = metainterp_sd.cpu
value = cpu.get_latest_value_ref(deadframe, 0)
- cpu.clear_latest_values(1)
raise metainterp_sd.ExitFrameWithExceptionRef(cpu, value)
diff --git a/pypy/jit/metainterp/pyjitpl.py b/pypy/jit/metainterp/pyjitpl.py
--- a/pypy/jit/metainterp/pyjitpl.py
+++ b/pypy/jit/metainterp/pyjitpl.py
@@ -1896,13 +1896,13 @@
self.staticdata.try_to_free_some_loops()
self.initialize_state_from_guard_failure(key, deadframe)
try:
- return self._handle_guard_failure(key)
+ return self._handle_guard_failure(key, deadframe)
finally:
self.resumekey_original_loop_token = None
self.staticdata.profiler.end_tracing()
debug_stop('jit-tracing')
- def _handle_guard_failure(self, key):
+ def _handle_guard_failure(self, key, deadframe):
self.current_merge_points = []
self.resumekey = key
self.seen_loop_header_for_jdindex = -1
@@ -1912,7 +1912,9 @@
else:
dont_change_position = False
try:
- self.prepare_resume_from_failure(key.guard_opnum,
dont_change_position)
+ self.prepare_resume_from_failure(key.guard_opnum,
+ dont_change_position,
+ deadframe)
if self.resumekey_original_loop_token is None: # very rare case
raise SwitchToBlackhole(Counters.ABORT_BRIDGE)
self.interpret()
@@ -2049,7 +2051,8 @@
else: assert 0
self.jitdriver_sd.warmstate.execute_assembler(loop_token, *args)
- def prepare_resume_from_failure(self, opnum, dont_change_position=False):
+ def prepare_resume_from_failure(self, opnum, dont_change_position,
+ deadframe):
frame = self.framestack[-1]
if opnum == rop.GUARD_TRUE: # a goto_if_not that jumps only now
if not dont_change_position:
@@ -2063,7 +2066,7 @@
opnum == rop.GUARD_NONNULL_CLASS):
pass # the pc is already set to the *start* of the opcode
elif opnum == rop.GUARD_NO_EXCEPTION or opnum == rop.GUARD_EXCEPTION:
- exception = self.cpu.grab_exc_value()
+ exception = self.cpu.grab_exc_value(deadframe)
if exception:
self.execute_ll_raised(lltype.cast_opaque_ptr(rclass.OBJECTPTR,
exception))
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit