Skip to content

Commit 4bc842e

Browse files
If the compiler returns no line number in case of an artificial bytecode instruction, then we show the last known line number.
1 parent 28937d3 commit 4bc842e

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

Lib/dis.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -768,15 +768,27 @@ def _get_instructions_bytes(code, linestarts=None, line_offset=0, co_positions=N
768768
starts_line = False
769769
local_line_number = None
770770
line_number = None
771+
last_line_number = None
771772
for offset, start_offset, op, arg in _unpack_opargs(original_code):
772773
if linestarts is not None:
773-
starts_line = offset in linestarts
774+
starts_line = False
775+
if offset in linestarts:
776+
# if linestarts[offset] is None, we don't start a new line
777+
# (JUMP_FORWARD, etc.)
778+
# same if last_line_number equals linestarts[offset]
779+
if linestarts[offset]:
780+
if last_line_number and linestarts[offset] == last_line_number:
781+
starts_line = False
782+
else:
783+
starts_line = True
774784
if starts_line:
775785
local_line_number = linestarts[offset]
776786
if local_line_number is not None:
777787
line_number = local_line_number + line_offset
778788
else:
779789
line_number = None
790+
if line_number is not None:
791+
last_line_number = line_number
780792
positions = Positions(*next(co_positions, ()))
781793
deop = _deoptop(op)
782794
op = code[offset]

0 commit comments

Comments
 (0)