Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r76757:e66f14f4e3d9 Date: 2015-04-09 14:26 +0200 http://bitbucket.org/pypy/pypy/changeset/e66f14f4e3d9/
Log: Test and fix for END_FINALLY's stack usage diff --git a/pypy/interpreter/astcompiler/assemble.py b/pypy/interpreter/astcompiler/assemble.py --- a/pypy/interpreter/astcompiler/assemble.py +++ b/pypy/interpreter/astcompiler/assemble.py @@ -593,7 +593,9 @@ ops.WITH_CLEANUP: -1, ops.POP_BLOCK: 0, - ops.END_FINALLY: -1, + ops.END_FINALLY: -3, # assume always 3: we pretend that SETUP_FINALLY + # pushes 3. In truth, it would only push 1 and + # the corresponding END_FINALLY only pops 1. ops.SETUP_WITH: 1, ops.SETUP_FINALLY: 0, ops.SETUP_EXCEPT: 0, diff --git a/pypy/interpreter/astcompiler/test/test_compiler.py b/pypy/interpreter/astcompiler/test/test_compiler.py --- a/pypy/interpreter/astcompiler/test/test_compiler.py +++ b/pypy/interpreter/astcompiler/test/test_compiler.py @@ -772,6 +772,24 @@ code = compile_with_astcompiler(source, 'exec', self.space) assert code.co_stacksize == 2 + def test_stackeffect_bug3(self): + source = """if 1: + try: pass + finally: pass + try: pass + finally: pass + try: pass + finally: pass + try: pass + finally: pass + try: pass + finally: pass + try: pass + finally: pass + """ + code = compile_with_astcompiler(source, 'exec', self.space) + assert code.co_stacksize == 3 + def test_lambda(self): yield self.st, "y = lambda x: x", "y(4)", 4 _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit