mirror of https://github.com/python/cpython
bpo-45757: Fix bug where dis produced an incorrect oparg on EXTENDED_ARG before a no-arg opcode (GH-29480)
This commit is contained in:
parent
bcc4e46832
commit
cb414cf0e2
|
@ -523,6 +523,7 @@ def _unpack_opargs(code):
|
|||
extended_arg = (arg << 8) if op == EXTENDED_ARG else 0
|
||||
else:
|
||||
arg = None
|
||||
extended_arg = 0
|
||||
yield (i, op, arg)
|
||||
|
||||
def findlabels(code):
|
||||
|
|
|
@ -179,6 +179,23 @@ dis_bug42562 = """\
|
|||
2 RETURN_VALUE
|
||||
"""
|
||||
|
||||
# Extended arg followed by NOP
|
||||
code_bug_45757 = bytes([
|
||||
0x90, 0x01, # EXTENDED_ARG 0x01
|
||||
0x09, 0xFF, # NOP 0xFF
|
||||
0x90, 0x01, # EXTENDED_ARG 0x01
|
||||
0x64, 0x29, # LOAD_CONST 0x29
|
||||
0x53, 0x00, # RETURN_VALUE 0x00
|
||||
])
|
||||
|
||||
dis_bug_45757 = """\
|
||||
0 EXTENDED_ARG 1
|
||||
2 NOP
|
||||
4 EXTENDED_ARG 1
|
||||
6 LOAD_CONST 297
|
||||
8 RETURN_VALUE
|
||||
"""
|
||||
|
||||
_BIG_LINENO_FORMAT = """\
|
||||
%3d 0 LOAD_GLOBAL 0 (spam)
|
||||
2 POP_TOP
|
||||
|
@ -547,6 +564,10 @@ class DisTests(unittest.TestCase):
|
|||
def test_bug_42562(self):
|
||||
self.do_disassembly_test(bug42562, dis_bug42562)
|
||||
|
||||
def test_bug_45757(self):
|
||||
# Extended arg followed by NOP
|
||||
self.do_disassembly_test(code_bug_45757, dis_bug_45757)
|
||||
|
||||
def test_big_linenos(self):
|
||||
def func(count):
|
||||
namespace = {}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Fix bug where :mod:`dis` produced an incorrect oparg when :opcode:`EXTENDED_ARG` is followed by an opcode that does not use its argument.
|
Loading…
Reference in New Issue