Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
Closed
Description
In Python 3.11b0,dis.dis() anddis.get_instructions() will show the "wrong" operand values for instructions prefixed by EXTENDED_ARG_QUICK.
Lines 591 to 595 ina4460f2
| deop=_deoptop(op) | |
| caches=_inline_cache_entries[deop] | |
| ifdeop>=HAVE_ARGUMENT: | |
| arg=code[i+1]|extended_arg | |
| extended_arg= (arg<<8)ifop==EXTENDED_ARGelse0 |
The bug is that this line only checks forEXTENDED_ARG instructions. It should check for instructions that deoptimize toEXTENDED_ARG (i.e.deop == EXTENDED_ARG).
Line 595 ina4460f2
| extended_arg= (arg<<8)ifop==EXTENDED_ARGelse0 |
To reproduce the issue, consider this snippet adapted from cloudpickle:
importrandomimporttextwrapimportdisnvars=65537+258names= ['g%d'%iforiinrange(1,nvars)]r=random.Random(42)d= {name:r.randrange(100)fornameinnames}# def f(x):# x = g1, g2, ...code="""def f(): x = {tup}""".format(tup=', '.join(names))exec(textwrap.dedent(code),d,d)f=d['f']dis.dis(f)