Python 3.13 Support Draft
Added basic 3.13 support.
Currently passing all unit tests with make check.
This PR also includes some small fixes to 3.12.
Still work in progress. While my fork passes testing, it still breaks in some major circumstances. For example, I cannot self disassemble xdis/opcodes/opcode_313.py, see TODO.
TODO (not exhaustive)
Formatting
- Lots of oparg formatting to fix. Ex. some new ops
SET_FUNCTION_ATTRIBUTEandCALL_KWneed to have formatting fixed. - Running into an error with certain bytecode that uses
EXTENDED_ARG. In some cases, I am findingEXTENDED_ARGwith an oparg of None, leading to type comparison errors and incorrect behavior.
"drop-in" dis support
dis.disassembleanddis.distbhave a new parametershow_offsets.- Instruction class in dis has new fields
start_offset,cache_offset,end_offset,baseopname,baseopcode,jump_target,oparg,line_numberandcache_info.
@rocky Is there a best way to find out what the pop and push values should be for defining a new instruction with def_op? I am running into issues finding the correct pop and push values for the new CALL_KW op.
@rocky Is there a best way to find out what the
popandpushvalues should be for defining a new instruction withdef_op? I am running into issues finding the correct pop and push values for the newCALL_KWop.
Hi @2elli :
For CALL_KW, use -2 for pop and 1 for push. -2 indicates that the "pop" value is not fixed and indeterminate. Down the line, I will define a literal value for that to make this more clear. This code goes back to Python 2.3 where literal values did not exist.
@rocky Is there a best way to find out what the
popandpushvalues should be for defining a new instruction withdef_op? I am running into issues finding the correct pop and push values for the newCALL_KWop.Hi @2elli :
For
CALL_KW, use -2 forpopand 1 forpush. -2 indicates that the "pop" value is not fixed and indeterminate. Down the line, I will define a literal value for that to make this more clear. This code goes back to Python 2.3 where literal values did not exist.
That makes sense thank you. I just pushed those changes. This does still raise an error with make check in pytest/test_stack_effect.py with error AssertionError: 57 (CALL_KW) needs adjusting; should be: should have effect -2. Is this okay to ignore or does this test need to be changed maybe?
This does still raise an error with
make checkinpytest/test_stack_effect.pywith errorAssertionError: 57 (CALL_KW) needs adjusting; should be: should have effect -2. Is this okay to ignore or does this test need to be changed maybe?
I'll look into this when I get a chance. There is probably some (or a lot) of cleanup needed around push and pop fields.
This does still raise an error with
make checkinpytest/test_stack_effect.pywith errorAssertionError: 57 (CALL_KW) needs adjusting; should be: should have effect -2. Is this okay to ignore or does this test need to be changed maybe?I'll look into this when I get a chance. There is probably some (or a lot) of cleanup needed around push and pop fields.
Ok sounds good thanks. Let me know if I can help out with anything there.
@rocky sounds good! I'll continue some work on this; currently there are some breaking changes I made in this. 3.12 line numbers are not correct at the moment unless ran from 3.12. I've been trying to debug in my free time. I'll update you.