From f24b8101a01fa98b1e3ec042ba896aeb4c24d4bc Mon Sep 17 00:00:00 2001 From: Yurii Karabas <1998uriyyo@gmail.com> Date: Fri, 4 Dec 2020 17:20:53 +0200 Subject: bpo-42562: Fix issue when dis failed to parse function that has no line numbers (GH-23632) Fix issue when dis failed to parse function that has only annotations --- Lib/dis.py | 2 +- Lib/test/test_dis.py | 17 +++++++++++++++++ .../Library/2020-12-03-22-42-03.bpo-42562.2hPmhi.rst | 2 ++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2020-12-03-22-42-03.bpo-42562.2hPmhi.rst diff --git a/Lib/dis.py b/Lib/dis.py index ea50f564c8..ccbd65be73 100644 --- a/Lib/dis.py +++ b/Lib/dis.py @@ -384,7 +384,7 @@ def _disassemble_bytes(code, lasti=-1, varnames=None, names=None, constants=None, cells=None, linestarts=None, *, file=None, line_offset=0): # Omit the line number column entirely if we have no line number info - show_lineno = linestarts is not None + show_lineno = bool(linestarts) if show_lineno: maxlineno = max(linestarts.values()) + line_offset if maxlineno >= 1000: diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py index d0743d62e3..56d8771518 100644 --- a/Lib/test/test_dis.py +++ b/Lib/test/test_dis.py @@ -166,6 +166,20 @@ dis_bug1333982 = """\ bug1333982.__code__.co_firstlineno + 2, bug1333982.__code__.co_firstlineno + 1) + +def bug42562(): + pass + + +# Set line number for 'pass' to None +bug42562.__code__ = bug42562.__code__.replace(co_linetable=b'\x04\x80\xff\x80') + + +dis_bug42562 = """\ + 0 LOAD_CONST 0 (None) + 2 RETURN_VALUE +""" + _BIG_LINENO_FORMAT = """\ %3d 0 LOAD_GLOBAL 0 (spam) 2 POP_TOP @@ -520,6 +534,9 @@ class DisTests(unittest.TestCase): self.do_disassembly_test(bug1333982, dis_bug1333982) + def test_bug_42562(self): + self.do_disassembly_test(bug42562, dis_bug42562) + def test_big_linenos(self): def func(count): namespace = {} diff --git a/Misc/NEWS.d/next/Library/2020-12-03-22-42-03.bpo-42562.2hPmhi.rst b/Misc/NEWS.d/next/Library/2020-12-03-22-42-03.bpo-42562.2hPmhi.rst new file mode 100644 index 0000000000..4999da509c --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-12-03-22-42-03.bpo-42562.2hPmhi.rst @@ -0,0 +1,2 @@ +Fix issue when dis failed to parse function that has no line numbers. Patch +provided by Yurii Karabas. -- cgit v1.2.1