mirror of
https://github.com/python/cpython
synced 2024-09-16 02:59:56 +00:00
gh-92932: dis._unpack_opargs should handle EXTENDED_ARG_QUICK (gh-92945)
This commit is contained in:
parent
941d7054c1
commit
b013804134
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
|
@ -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 = []
|
||||
|
|
|
@ -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.
|
Loading…
Reference in a new issue