[New-bugs-announce] [issue47085] missing frame.f_lineno on JUMP_ABSOLUTE

Thomas Grainger report at bugs.python.org
Mon Mar 21 15:21:07 EDT 2022


New submission from Thomas Grainger <tagrain at gmail.com>:

the following code prints:

import sys
import dis

import pprint

def demo():
    for i in range(1):
        if i >= 0:
            pass


class Tracer:
    def __init__(self):
        self.events = []

    def trace(self, frame, event, arg):
        self.events.append((frame.f_lineno, frame.f_lasti, event))
        frame.f_trace_lines = True
        frame.f_trace_opcodes = True
        return self.trace

def main():
    t = Tracer()
    old_trace = sys.gettrace()
    try:
        sys.settrace(t.trace)
        demo()
    finally:
        sys.settrace(old_trace)
    dis.dis(demo)
    pprint.pp(t.events)


if __name__ == "__main__":
    sys.exit(main())



  7           0 LOAD_GLOBAL              0 (range)
              2 LOAD_CONST               1 (1)
              4 CALL_FUNCTION            1
              6 GET_ITER
        >>    8 FOR_ITER                 7 (to 24)
             10 STORE_FAST               0 (i)

  8          12 LOAD_FAST                0 (i)
             14 LOAD_CONST               2 (0)
             16 COMPARE_OP               5 (>=)
             18 POP_JUMP_IF_FALSE       11 (to 22)

  9          20 NOP
        >>   22 JUMP_ABSOLUTE            4 (to 8)

  7     >>   24 LOAD_CONST               0 (None)
             26 RETURN_VALUE
[(6, -1, 'call'),
 (7, 0, 'line'),
 (7, 0, 'opcode'),
 (7, 2, 'opcode'),
 (7, 4, 'opcode'),
 (7, 6, 'opcode'),
 (7, 8, 'opcode'),
 (7, 10, 'opcode'),
 (8, 12, 'line'),
 (8, 12, 'opcode'),
 (8, 14, 'opcode'),
 (8, 16, 'opcode'),
 (8, 18, 'opcode'),
 (9, 20, 'line'),
 (9, 20, 'opcode'),
 (None, 22, 'opcode'),
 (7, 8, 'line'),
 (7, 8, 'opcode'),
 (7, 24, 'opcode'),
 (7, 26, 'opcode'),
 (7, 26, 'return')]


but I'd expect  (9, 22, 'opcode') instead of (None, 22, 'opcode'),

----------
messages: 415697
nosy: graingert
priority: normal
severity: normal
status: open
title: missing frame.f_lineno on JUMP_ABSOLUTE
versions: Python 3.10, Python 3.11

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue47085>
_______________________________________


More information about the New-bugs-announce mailing list