From 85ea2d6165dec0cffa6302eb6dc40406eae1edf5 Mon Sep 17 00:00:00 2001 From: Batuhan Taskaya Date: Fri, 3 Sep 2021 18:29:09 +0300 Subject: bpo-43950: support positions for dis.Instructions created through dis.Bytecode (GH-28142) --- Lib/dis.py | 3 ++- Lib/test/test_dis.py | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Lib/dis.py b/Lib/dis.py index 3cacd9a..66487dc 100644 --- a/Lib/dis.py +++ b/Lib/dis.py @@ -564,7 +564,8 @@ class Bytecode: co.co_names, co.co_consts, self._linestarts, line_offset=self._line_offset, - exception_entries=self.exception_entries) + exception_entries=self.exception_entries, + co_positions=co.co_positions()) def __repr__(self): return "{}({!r})".format(self.__class__.__name__, diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py index b6bd88c..b97e41c 100644 --- a/Lib/test/test_dis.py +++ b/Lib/test/test_dis.py @@ -1302,6 +1302,11 @@ class BytecodeTests(InstructionTestCase): b = dis.Bytecode.from_traceback(tb) self.assertEqual(b.dis(), dis_traceback) + @requires_debug_ranges() + def test_bytecode_co_positions(self): + bytecode = dis.Bytecode("a=1") + for instr, positions in zip(bytecode, bytecode.codeobj.co_positions()): + assert instr.positions == positions class TestBytecodeTestCase(BytecodeTestCase): def test_assert_not_in_with_op_not_in_bytecode(self): -- cgit v0.12