[pypy-commit] pypy default: Test and fix for END_FINALLY's stack usage
arigo
noreply at buildbot.pypy.org
Thu Apr 9 14:26:24 CEST 2015
Author: Armin Rigo <arigo at 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
More information about the pypy-commit
mailing list