Hi all,
I am in the slow process of adding support for Python 3.11 in the
bytecode project (https://github.com/MatthieuDartiailh/bytecode).
While attempting to update some tests I stumbled upon the need to
include CACHE opcode to get things to work. For example, one can use
bytecode to manually assemble the bytecode for the function:
def f():
return 24 < 42
Under Python 3.10 it would look like:
f.__code__= Bytecode(
[
Instr("LOAD_CONST", 24),
Instr("LOAD_CONST", 42),
Instr("COMPARE_OP", Compare.LT),
Instr("RETURN_VALUE"), ]
).to_code()
Under Python 3.11 I had to go to:
f.__code__= Bytecode(
[
Instr("RESUME", 0), Instr("LOAD_CONST", 24),
Instr("LOAD_CONST", 42),
Instr("COMPARE_OP", Compare.LT), Instr("CACHE", 0),
Instr("CACHE", 0),
Instr("RETURN_VALUE"), ]
).to_code()
Reading the doc for the dis module I understand the need for the RESUME
instruction. However the documentation is rather vague in regard of CACHE.
In particular when using the first version, the code in the function
ends up looking like '\x97\x00d\x00d\x01k\x00\x00\x00\x00\x00' even
though bytecode generated '\x97\x00d\x00d\x01k\x00S\x00'. One can "see"
that the two caches (\x00\x00\x00\x00) have been added automatically but
the return disappeared. Is this a bug in 3.11 and if not where can I
find more details regarding where one expect CACHE instructions to be
present ?
Best
Matthieu C. Dartiailh
PS: I know the mailing list is going to be retired but I did not yet got
everything configured for Discourse.___
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at
https://mail.python.org/archives/list/python-dev@python.org/message/AGXZVV5XLBNHM3KRNFNTLQU34OKEH4K4/
Code of Conduct: http://python.org/psf/codeofconduct/