[pypy-svn] r10923 - pypy/branch/canonlyraise-pypy/objspace/flow

arigo at codespeak.net arigo at codespeak.net
Wed Apr 20 17:23:50 CEST 2005


Author: arigo
Date: Wed Apr 20 17:23:49 2005
New Revision: 10923

Modified:
   pypy/branch/canonlyraise-pypy/objspace/flow/model.py
Log:
More precise checkgraph(), looking for badly placed last_exception and 
last_exc_value.



Modified: pypy/branch/canonlyraise-pypy/objspace/flow/model.py
==============================================================================
--- pypy/branch/canonlyraise-pypy/objspace/flow/model.py	(original)
+++ pypy/branch/canonlyraise-pypy/objspace/flow/model.py	Wed Apr 20 17:23:49 2005
@@ -332,6 +332,10 @@
                         assert isinstance(v, (Constant, Variable))
                         if isinstance(v, Variable):
                             assert v in vars
+                        else:
+                            assert v.value != last_exception
+                            assert v.value != last_exc_value
+                exc_links = {}
                 if block.exitswitch is None:
                     assert len(block.exits) <= 1
                     if block.exits:
@@ -342,16 +346,24 @@
                     assert block.exits[0].exitcase is None
                     for link in block.exits[1:]:
                         assert issubclass(link.exitcase, Exception)
+                        exc_links[link] = True
                 else:
                     assert isinstance(block.exitswitch, Variable)
                     assert block.exitswitch in vars
                 for link in block.exits:
                     assert len(link.args) == len(link.target.inputargs)
                     assert link.prevblock is block
+                    exc_link = link in exc_links
                     for v in link.args:
                         assert isinstance(v, (Constant, Variable))
                         if isinstance(v, Variable):
                             assert v in vars
+                            if exc_link:
+                                assert v != block.operations[-1].result
+                        else:
+                            if not exc_link:
+                                assert v.value != last_exception
+                                assert v.value != last_exc_value
                 vars_previous_blocks.update(vars)
 
         try:



More information about the Pypy-commit mailing list