[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