Hi,
Could some one give a hand with explaining to me why we have a JUMP_ABSOLUTE
followed by a JUMP_FORWARD op code when this function is disassembled.
>>> def f1():
... a, b = 10, 11
... if a >= 10:
... if b >= 11:
... print("hello world")
…
The disassembled function is shown below.
>>> dis(f1)
2 0 LOAD_CONST 4 ((10, 11))
3 UNPACK_SEQUENCE 2
6 STORE_FAST 0 (a)
9 STORE_FAST 1 (b)
3 12 LOAD_FAST 0 (a)
15 LOAD_CONST 1 (10)
18 COMPARE_OP 5 (>=)
21 POP_JUMP_IF_FALSE 47
4 24 LOAD_FAST 1 (b)
27 LOAD_CONST 2 (11)
30 COMPARE_OP 5 (>=)
33 POP_JUMP_IF_FALSE 47
5 36 LOAD_CONST 3 ('hello world')
39 PRINT_ITEM
40 PRINT_NEWLINE
41 JUMP_ABSOLUTE 47
44 JUMP_FORWARD 0 (to 47)
>> 47 LOAD_CONST 0 (None)
50 RETURN_VALUE
From my understanding, once JUMP_ABSOLUTE is executed, then JUMP_FORWARD is
never gotten to so must be dead code so why is it being generated?
Furthermore why is JUMP_ABSOLUTE rather than JUMP_FORWARD used in this
particular case of nested if statements? I have tried other types of nested if
statements and it has always been JUMP_FORWARD that
is generated.
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com