[Python-Dev] JUMP_ABSOLUTE in nested if statements

Obiesie ike-nwosu c4obi at yahoo.com
Sat Jun 18 17:04:10 EDT 2016


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.


More information about the Python-Dev mailing list