Skip to content

Commit

Permalink
gh-92932: dis._unpack_opargs should handle EXTENDED_ARG_QUICK (gh-92945)
Browse files Browse the repository at this point in the history
  • Loading branch information
corona10 committed Jun 3, 2022
1 parent 941d705 commit b013804
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Lib/dis.py
Expand Up @@ -592,7 +592,7 @@ def _unpack_opargs(code):
caches = _inline_cache_entries[deop]
if deop >= HAVE_ARGUMENT:
arg = code[i+1] | extended_arg
extended_arg = (arg << 8) if op == EXTENDED_ARG else 0
extended_arg = (arg << 8) if deop == EXTENDED_ARG else 0
# The oparg is stored as a signed integer
# If the value exceeds its upper limit, it will overflow and wrap
# to a negative integer
Expand Down
21 changes: 21 additions & 0 deletions Lib/test/test_dis.py
Expand Up @@ -620,6 +620,22 @@ def loop_test():
loop_test.__code__.co_firstlineno + 2,
loop_test.__code__.co_firstlineno + 1,)

def extended_arg_quick():
*_, _ = ...

dis_extended_arg_quick_code = """\
%3d 0 RESUME 0
%3d 2 LOAD_CONST 1 (Ellipsis)
4 EXTENDED_ARG_QUICK 1
6 UNPACK_EX 256
8 STORE_FAST 0 (_)
10 STORE_FAST 0 (_)
12 LOAD_CONST 0 (None)
14 RETURN_VALUE
"""% (extended_arg_quick.__code__.co_firstlineno,
extended_arg_quick.__code__.co_firstlineno + 1,)

QUICKENING_WARMUP_DELAY = 8

class DisTestBase(unittest.TestCase):
Expand Down Expand Up @@ -997,6 +1013,11 @@ def test_loop_quicken(self):
got = self.get_disassembly(loop_test, adaptive=True)
self.do_disassembly_compare(got, dis_loop_test_quickened_code)

@cpython_only
def test_extended_arg_quick(self):
got = self.get_disassembly(extended_arg_quick)
self.do_disassembly_compare(got, dis_extended_arg_quick_code, True)

def get_cached_values(self, quickened, adaptive):
def f():
l = []
Expand Down
@@ -0,0 +1,3 @@
Now :func:`~dis.dis` and :func:`~dis.get_instructions` handle operand values
for instructions prefixed by ``EXTENDED_ARG_QUICK``.
Patch by Sam Gross and Dong-hee Na.

0 comments on commit b013804

Please sign in to comment.