[pypy-svn] r74957 - in pypy/branch/blackhole-improvement/pypy/jit/metainterp: . test
arigo at codespeak.net
arigo at codespeak.net
Mon May 31 02:15:20 CEST 2010
Author: arigo
Date: Mon May 31 02:15:19 2010
New Revision: 74957
Modified:
pypy/branch/blackhole-improvement/pypy/jit/metainterp/executor.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_executor.py
Log:
Some more fixes for when last_exc_value_box is expected
to be cleared or not. Now clear it a bit more aggressively
before running any operation that might set it --- this
includes CALL_PURE, even though it cannot actually set it;
previously, it would fail to clear the exception in that
case, and crash because one exception is still set.
Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/executor.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/executor.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/executor.py Mon May 31 02:15:19 2010
@@ -58,8 +58,6 @@
except Exception, e:
metainterp.execute_raised(e)
result = 0
- else:
- metainterp.execute_did_not_raise()
return BoxInt(result)
if rettype == REF:
try:
@@ -67,8 +65,6 @@
except Exception, e:
metainterp.execute_raised(e)
result = NULL
- else:
- metainterp.execute_did_not_raise()
return BoxPtr(result)
if rettype == FLOAT:
try:
@@ -76,16 +72,12 @@
except Exception, e:
metainterp.execute_raised(e)
result = 0.0
- else:
- metainterp.execute_did_not_raise()
return BoxFloat(result)
if rettype == VOID:
try:
cpu.bh_call_v(func, descr, args_i, args_r, args_f)
except Exception, e:
metainterp.execute_raised(e)
- else:
- metainterp.execute_did_not_raise()
return None
raise AssertionError("bad rettype")
@@ -189,8 +181,6 @@
except OverflowError:
metainterp.execute_raised(OverflowError(), constant=True)
z = 0
- else:
- metainterp.execute_did_not_raise()
return BoxInt(z)
def do_int_sub_ovf(cpu, metainterp, box1, box2):
@@ -202,8 +192,6 @@
except OverflowError:
metainterp.execute_raised(OverflowError(), constant=True)
z = 0
- else:
- metainterp.execute_did_not_raise()
return BoxInt(z)
def do_int_mul_ovf(cpu, metainterp, box1, box2):
@@ -215,8 +203,6 @@
except OverflowError:
metainterp.execute_raised(OverflowError(), constant=True)
z = 0
- else:
- metainterp.execute_did_not_raise()
return BoxInt(z)
def do_same_as(cpu, _, box):
Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py Mon May 31 02:15:19 2010
@@ -184,6 +184,7 @@
exec py.code.Source('''
@arguments("box", "box")
def opimpl_%s(self, b1, b2):
+ self.metainterp.clear_exception()
resbox = self.execute(rop.%s, b1, b2)
self.make_result_of_lastop(resbox) # same as execute_varargs()
self.metainterp.handle_possible_overflow_error()
@@ -971,6 +972,7 @@
@specialize.arg(1)
def execute_varargs(self, opnum, argboxes, descr, exc):
+ self.metainterp.clear_exception()
resbox = self.metainterp.execute_and_record_varargs(opnum, argboxes,
descr=descr)
self.make_result_of_lastop(resbox)
@@ -1022,6 +1024,7 @@
effectinfo.EF_FORCES_VIRTUAL_OR_VIRTUALIZABLE or
assembler_call_token is not None):
# residual calls require attention to keep virtualizables in-sync
+ self.metainterp.clear_exception()
self.metainterp.vable_and_vrefs_before_residual_call()
resbox = self.metainterp.execute_and_record_varargs(
rop.CALL_MAY_FORCE, allboxes, descr=descr)
@@ -1451,7 +1454,7 @@
# stored in the exc_value Box can be assumed to be a Const. This
# is only True after a GUARD_EXCEPTION or GUARD_CLASS.
- def execute_did_not_raise(self):
+ def clear_exception(self):
self.last_exc_value_box = None
def aborted_tracing(self, reason):
@@ -1647,7 +1650,7 @@
self.execute_ll_raised(lltype.cast_opaque_ptr(rclass.OBJECTPTR,
exception))
else:
- self.execute_did_not_raise()
+ self.clear_exception()
try:
self.handle_possible_exception()
except ChangeFrame:
@@ -1659,7 +1662,7 @@
except ChangeFrame:
pass
elif opnum == rop.GUARD_OVERFLOW: # no longer overflowing
- self.execute_did_not_raise()
+ self.clear_exception()
else:
from pypy.jit.metainterp.resoperation import opname
raise NotImplementedError(opname[opnum])
Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_executor.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_executor.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/test/test_executor.py Mon May 31 02:15:19 2010
@@ -38,8 +38,7 @@
self.fakeargs = args
class FakeMetaInterp:
- def execute_did_not_raise(self):
- self.didraise = False
+ pass
class FakeCPU(AbstractCPU):
supports_floats = True
@@ -76,15 +75,13 @@
def test_execute_varargs():
cpu = FakeCPU()
- metainterp = FakeMetaInterp()
descr = FakeCallDescr()
argboxes = [BoxInt(99999), BoxInt(321), ConstFloat(2.25), ConstInt(123),
BoxPtr(), BoxFloat(5.5)]
- box = execute_varargs(cpu, metainterp, rop.CALL, argboxes, descr)
+ box = execute_varargs(cpu, FakeMetaInterp(), rop.CALL, argboxes, descr)
assert box.value == 42.5
assert cpu.fakecalled == (99999, descr, [321, 123],
[ConstPtr.value], [2.25, 5.5])
- assert not metainterp.didraise
def test_execute_nonspec():
cpu = FakeCPU()
More information about the Pypy-commit
mailing list