rocky / python-xdis

Python cross-version bytecode library and disassembler
GNU General Public License v2.0
292 stars 95 forks source link

Python 3.13 Support Draft #153

Open 2elli opened 2 weeks ago

2elli commented 2 weeks ago

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

2elli commented 2 weeks ago

@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 commented 2 weeks ago

@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.

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.

2elli commented 2 weeks ago

@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.

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.

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?

rocky commented 2 weeks ago

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?

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.

2elli commented 2 weeks ago

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?

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.