[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