Issue1754094
Created on 2007-07-14 20:38 by ctl, last changed 2009-02-07 00:25 by nascheme.
|
msg52876 - (view) |
Author: Christopher Tur Lesniewski-Laas (ctl) |
Date: 2007-07-14 20:38 |
|
The existing code in stackdepth_walk gives conservative, but not very tight, bounds for stack depth. Some of this is simply bugs: for example,
import a,b,c,d,e,f,...,z
will leak a stack slot for each import, and
a[:],b[:],c[:],...,z[:]
leaks a stack slot for each SLICE+0 opcode.
Some of it is because stackdepth_walk assumes that the stack effect of jumps is the same at the target. In particular, a sequence of for-loops will leak 2 stack slots for each for-loop.
The attached patch fixes both of these problems. It corrects the stack effect for several opcodes that were simply incorrect (perhaps from an older version?). It also changes stackdepth_walk to treat FOR_ITER, SETUP_EXCEPT, and SETUP_FINALLY specially when following their targets.
Note: this patch also introduces a dependency from stackdepth_walk to the compiler, because it assumes that END_FINALLY is always preceded by the target of a SETUP_EXCEPT or SETUP_FINALLY.
|
|
| Date |
User |
Action |
Args |
| 2009-02-07 00:25:37 | nascheme | set | assignee: nascheme nosy:
+ nascheme |
| 2007-07-14 20:38:17 | ctl | create | |
|