[pypy-svn] r64073 - in pypy/branch/pyjitpl5-simplify/pypy/translator/backendopt: . test
arigo at codespeak.net
arigo at codespeak.net
Tue Apr 14 19:51:57 CEST 2009
Author: arigo
Date: Tue Apr 14 19:51:55 2009
New Revision: 64073
Modified:
pypy/branch/pyjitpl5-simplify/pypy/translator/backendopt/inline.py
pypy/branch/pyjitpl5-simplify/pypy/translator/backendopt/test/test_inline.py
Log:
issue431 testing
A two-lines fix with a tediously found test.
Modified: pypy/branch/pyjitpl5-simplify/pypy/translator/backendopt/inline.py
==============================================================================
--- pypy/branch/pyjitpl5-simplify/pypy/translator/backendopt/inline.py (original)
+++ pypy/branch/pyjitpl5-simplify/pypy/translator/backendopt/inline.py Tue Apr 14 19:51:55 2009
@@ -381,6 +381,8 @@
excdata = self.translator.rtyper.getexceptiondata()
exc_match = excdata.fn_exception_match
for link in self.entrymap[self.graph_to_inline.exceptblock]:
+ if link.prevblock.exits[0] is not link:
+ continue
copiedblock = self.copy_block(link.prevblock)
VALUE, copiedlink = _find_exception_type(copiedblock)
#print copiedblock.operations
Modified: pypy/branch/pyjitpl5-simplify/pypy/translator/backendopt/test/test_inline.py
==============================================================================
--- pypy/branch/pyjitpl5-simplify/pypy/translator/backendopt/test/test_inline.py (original)
+++ pypy/branch/pyjitpl5-simplify/pypy/translator/backendopt/test/test_inline.py Tue Apr 14 19:51:55 2009
@@ -93,10 +93,17 @@
return eval_func
def check_auto_inlining(self, func, sig, multiplier=None, call_count_check=False,
- checkvirtual=False, remove_same_as=False, heuristic=None):
+ checkvirtual=False, remove_same_as=False, heuristic=None,
+ const_fold_first=False):
t = self.translate(func, sig)
if checkvirtual:
check_virtual_methods()
+ if const_fold_first:
+ from pypy.translator.backendopt.constfold import constant_fold_graph
+ from pypy.translator.simplify import eliminate_empty_blocks
+ for graph in t.graphs:
+ constant_fold_graph(graph)
+ eliminate_empty_blocks(graph)
if option.view:
t.view()
# inline!
@@ -563,6 +570,25 @@
result = eval_func([])
assert result == 6
+ def test_bug_in_find_exception_type(self):
+ def h():
+ pass
+ def g(i):
+ if i > 0:
+ raise IndexError
+ else:
+ h()
+ def f(i):
+ try:
+ g(i)
+ except IndexError:
+ pass
+
+ eval_func, t = self.check_auto_inlining(f, [int], remove_same_as=True,
+ const_fold_first=True)
+ eval_func([-66])
+ eval_func([282])
+
class TestInlineLLType(LLRtypeMixin, BaseTestInline):
More information about the Pypy-commit
mailing list