[pypy-svn] r61434 - in pypy/trunk/pypy/interpreter/astcompiler: . test

fijal at codespeak.net fijal at codespeak.net
Wed Jan 28 22:55:36 CET 2009


Author: fijal
Date: Wed Jan 28 22:55:35 2009
New Revision: 61434

Modified:
   pypy/trunk/pypy/interpreter/astcompiler/pycodegen.py
   pypy/trunk/pypy/interpreter/astcompiler/test/test_compiler.py
Log:
a test and a fix for bytecode corruption


Modified: pypy/trunk/pypy/interpreter/astcompiler/pycodegen.py
==============================================================================
--- pypy/trunk/pypy/interpreter/astcompiler/pycodegen.py	(original)
+++ pypy/trunk/pypy/interpreter/astcompiler/pycodegen.py	Wed Jan 28 22:55:35 2009
@@ -429,7 +429,10 @@
         self.nextBlock(after)
 
     def visitBreak(self, node):
-        if len(self.setups) == 0:
+        # compute setups
+        setups = [s for s in self.setups if
+                  (s[0] != EXCEPT and s[0] != TRY_FINALLY)]
+        if len(setups) == 0:
             raise SyntaxError( "'break' outside loop", node.lineno)
         self.set_lineno(node)
         self.emit('BREAK_LOOP')

Modified: pypy/trunk/pypy/interpreter/astcompiler/test/test_compiler.py
==============================================================================
--- pypy/trunk/pypy/interpreter/astcompiler/test/test_compiler.py	(original)
+++ pypy/trunk/pypy/interpreter/astcompiler/test/test_compiler.py	Wed Jan 28 22:55:35 2009
@@ -672,4 +672,11 @@
         source = "call(a, b, c) = 3"
         py.test.raises(SyntaxError, self.simple_test, source, None, None)
 
-    
+    def test_broken_setups(self):
+        source = """if 1:
+        try:
+           break
+        finally:
+           pass
+        """
+        py.test.raises(SyntaxError, self.simple_test, source, None, None)



More information about the Pypy-commit mailing list