Message52876
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 |
2007-08-23 15:59:08 | admin | link | issue1754094 messages |
2007-08-23 15:59:08 | admin | create | |
|