Fix MAKE_FUNCTION default args for py 3.6-3.12
DRAFT: This is stacked on top of #538 as both include changes to the same opcode
Some changes for the handling of MAKE_FUNCTION operand & arguments in py3.6-3.12 that I discovered while make some fixes to decompile a py 3.11 app. I started on this before I noticed that #391 existed, but as this PR is stacked on top of #538 it works for py 3.0 & py 3.4 too.
MAKE_FUNCTION Python 3.4 Docs MAKE_FUNCTION Python 3.7 Docs
Summary
- Remove xfail test_functions_py3 for py 3.7
- Update compiled test_functions_py3 for py 3.7 to match input .py with the new test case in #538
- Added a branch for py 3.6+ to handle the args & kwargs being in tuples & dicts
Tests
The test_functions_py3 for py 3.7 was in xfail.
In the previous PR, I added a new test case and updated the tokenized version, to match this the test_functions_py3.3.7.pyc file in compiled was re-built from the (previously updated) source in input.
I used the token_dump and pymultic scripts for this, with a slight modification to use -alpine containers in pymultic.
New py3.6-12 Arg Defaults for MAKE_FUNCTION
With the current master, pycdc produced this output for the x7d test case on py3.7.
def x7d(foo = None, *, bar, **kwargs):
However, this is the input
def x7d(foo = 1, *, bar = 2, **kwargs):
This is because the MAKE_FUNCTION code expects individual args on the stack, but they are now on the stack inside of 0-4 tuples & kwargs indicated by the operand flag.
Stacked on top of #538 Duplicates #391 Related Issues #507 ? #155 ? #138 #448 The MAKE_FUNCTION part
And they changed it again on Python 3.13
Hi @CarrBen thanks for your contribution. Would it be possible for you to update this PR wrt py 3.12/3.13? Thanks!
Hello @CarrBen thanks for your contribution.You can update this PR to Python3.13 version 3.13?thank you!
@whoami730 @1111qqjwbbw I think this branch might work OK for 3.12 (though there might be some other things that don't play nice with it).
For 3.13, I'm looking at updating it, I think I have a fix, but it looks like there are some other changes to CALL in 3.13 that have some wider consequences.
I might raise another PR for 3.13 support rather than push here, but I'll update here with more info once I push something.
@whoami730 @1111qqjwbbw I've set up #579 for the Python 3.13 MAKE_FUNCTION. It's a draft as it builds on top of both this PR and #538