Author: Armin Rigo <[email protected]>
Branch:
Changeset: r89118:e58b69ffe5aa
Date: 2016-12-17 17:59 +0100
http://bitbucket.org/pypy/pypy/changeset/e58b69ffe5aa/
Log: flow space: only emit ll_assert_not_none() in some forms of raise,
not if we built the exception instance just now
diff --git a/rpython/flowspace/flowcontext.py b/rpython/flowspace/flowcontext.py
--- a/rpython/flowspace/flowcontext.py
+++ b/rpython/flowspace/flowcontext.py
@@ -599,6 +599,7 @@
"""
from rpython.rlib.debug import ll_assert_not_none
+ check_not_none = False
w_is_type = op.isinstance(w_arg1, const(type)).eval(self)
if self.guessbool(w_is_type):
# this is for all cases of the form (Class, something)
@@ -610,6 +611,7 @@
if self.guessbool(op.issubtype(w_valuetype,
w_arg1).eval(self)):
# raise Type, Instance: let etype be the exact type of
value
w_value = w_arg2
+ check_not_none = True
else:
# raise Type, X: assume X is the constructor argument
w_value = op.simple_call(w_arg1, w_arg2).eval(self)
@@ -620,7 +622,10 @@
"separate value")
raise Raise(const(exc))
w_value = w_arg1
- w_value = op.simple_call(const(ll_assert_not_none), w_value).eval(self)
+ check_not_none = True
+ if check_not_none:
+ w_value = op.simple_call(const(ll_assert_not_none),
+ w_value).eval(self)
w_type = op.type(w_value).eval(self)
return FSException(w_type, w_value)
diff --git a/rpython/jit/codewriter/test/test_flatten.py
b/rpython/jit/codewriter/test/test_flatten.py
--- a/rpython/jit/codewriter/test/test_flatten.py
+++ b/rpython/jit/codewriter/test/test_flatten.py
@@ -466,6 +466,14 @@
int_return $True
""", transform=True)
+ def test_assert_disappears(self):
+ def f(i):
+ assert i > 5
+ return i
+ self.encoding_test(f, [7], """
+ int_return %i0
+ """)
+
def test_int_floordiv_ovf_zer(self):
def f(i, j):
assert i >= 0
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit