[pypy-svn] r10366 - in pypy/dist/pypy/translator: . test

pedronis at codespeak.net pedronis at codespeak.net
Wed Apr 6 15:26:33 CEST 2005


Author: pedronis
Date: Wed Apr  6 15:26:33 2005
New Revision: 10366

Modified:
   pypy/dist/pypy/translator/annrpython.py
   pypy/dist/pypy/translator/test/test_annrpython.py
Log:
annotate implicit exceptions properly



Modified: pypy/dist/pypy/translator/annrpython.py
==============================================================================
--- pypy/dist/pypy/translator/annrpython.py	(original)
+++ pypy/dist/pypy/translator/annrpython.py	Wed Apr  6 15:26:33 2005
@@ -372,7 +372,10 @@
             if isinstance(link.exitcase, (types.ClassType, type)) \
                    and issubclass(link.exitcase, Exception):
                 last_exception_object = annmodel.SomeObject()
-                last_exc_value_object = annmodel.SomeObject()
+                if link.exitcase is Exception:
+                    last_exc_value_object = annmodel.SomeObject()
+                else:
+                    last_exc_value_object = self.bookkeeper.valueoftype(link.exitcase)
                 last_exc_value_vars = []
                 in_except_block = True
                 last_exception_unknown = True

Modified: pypy/dist/pypy/translator/test/test_annrpython.py
==============================================================================
--- pypy/dist/pypy/translator/test/test_annrpython.py	(original)
+++ pypy/dist/pypy/translator/test/test_annrpython.py	Wed Apr  6 15:26:33 2005
@@ -606,6 +606,18 @@
         s = a.build_types(f, [object])
         assert s.knowntype is C
 
+    def test_implicit_exc(self):
+        def f(l):
+            try:
+                l[0]
+            except (KeyError, IndexError),e:
+                return e
+            return None
+
+        a = RPythonAnnotator()
+        s = a.build_types(f, [list])
+        assert s.knowntype is LookupError
+
     def test_overrides(self):
         import sys
         excs = []



More information about the Pypy-commit mailing list