Author: Antonio Cuni <[email protected]>
Branch: invalidate-virtualrefs
Changeset: r44489:6853b1a2c2b3
Date: 2011-05-25 21:52 +0200
http://bitbucket.org/pypy/pypy/changeset/6853b1a2c2b3/
Log: inform the rtyper that calling a vref might raise an exception (but
only after the transformation done by the JIT, not implemented yet)
diff --git a/pypy/rlib/_jit_vref.py b/pypy/rlib/_jit_vref.py
--- a/pypy/rlib/_jit_vref.py
+++ b/pypy/rlib/_jit_vref.py
@@ -50,6 +50,7 @@
def rtype_simple_call(self, hop):
[v] = hop.inputargs(self)
+ hop.exception_is_here()
v = hop.genop('jit_force_virtual', [v], resulttype = OBJECTPTR)
return hop.genop('cast_pointer', [v], resulttype = hop.r_result)
@@ -65,6 +66,7 @@
lowleveltype = OBJECT
def rtype_simple_call(self, hop):
[v] = hop.inputargs(self)
+ hop.exception_is_here()
v = hop.genop('jit_force_virtual', [v], resulttype = OBJECT)
return hop.genop('oodowncast', [v], resulttype = hop.r_result)
diff --git a/pypy/rlib/test/test__jit_vref.py b/pypy/rlib/test/test__jit_vref.py
--- a/pypy/rlib/test/test__jit_vref.py
+++ b/pypy/rlib/test/test__jit_vref.py
@@ -124,6 +124,18 @@
assert lltype.typeOf(x) == self.OBJECTTYPE
assert not x
+ def test_rtype_5(self):
+ def f():
+ vref = virtual_ref(X())
+ try:
+ vref()
+ return 42
+ except InvalidVirtualRef:
+ return -1
+ x = self.interpret(f, [])
+ assert x == 42
+
+
class TestLLtype(BaseTestVRef, LLRtypeMixin):
OBJECTTYPE = OBJECTPTR
def castable(self, TO, var):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit