bytecode JUMP_IF_* always followed by POP_TOP?
Robert Brewer
fumanchu at amor.org
Thu Apr 22 16:48:16 EDT 2004
Playing around with bytecodes some more:
>>> def g(x):
... if x:
... y
... else:
... z
...
>>> dis.dis(g)
2 0 LOAD_FAST 0 (x)
3 JUMP_IF_FALSE 8 (to 14)
6 POP_TOP
3 7 LOAD_GLOBAL 1 (y)
10 POP_TOP
11 JUMP_FORWARD 5 (to 19)
>> 14 POP_TOP
5 15 LOAD_GLOBAL 2 (z)
18 POP_TOP
>> 19 LOAD_CONST 0 (None)
22 RETURN_VALUE
I notice that, whether JUMP_IF_FALSE jumps or not, the next instruction
it executes is POP_TOP (in the above, instruction numbers 6 and 14). Are
there any constructions whereby this does not happen for JUMP_IF_FALSE
and JUMP_IF_TRUE? If there aren't, is it just explicitness that kept
JUMP_IF_* from doing the POP on its own, before the jump (which would
thereby save two instructions)?
Robert Brewer
MIS
Amor Ministries
fumanchu at amor.org
More information about the Python-list
mailing list