Skip to content

Conversation

Levak
Copy link
Contributor

@Levak Levak commented Jun 24, 2024

  • Add tests for simple cases of try-except-finally (rename one old Python 2.6 test);

  • Implement JUMP_IF_NOT_EXC_MATCH_A with a fake CMP_EXCEPTION followed by a POP_JUMP_IF_TRUE;

  • Implement BEGIN_FINALLY with a fake LOAD_CONST_A None;

  • Implement Python 3.8+ specific SETUP_FINALLY_A handling both EXCEPT and FINALLY cases. We guess which is which by looking at the targeted block that seems to either be a POP_TOP or a DUP_TOP in the case of an EXCEPT block;

  • Implement RERAISE with a fake END_FINALLY;

  • In Python 3.9+, emulate a BEGIN_FINALLY when POP_BLOCK is not followed by a JUMP_FORWARD_A (maybe source of bugs);

  • In Python 3.9+, skip the duplicated code from the FINALLY blocks with a jump in bytecode and a fake END_FINALLY.

- Add tests for simple cases of try-except-finally;

- Implement `JUMP_IF_NOT_EXC_MATCH_A` with a fake `CMP_EXCEPTION`
  followed by a `POP_JUMP_IF_TRUE`;

- Implement `BEGIN_FINALLY` with a fake `LOAD_CONST_A None`;

- Implement Python 3.8+ specific `SETUP_FINALLY_A` handling both
  EXCEPT and FINALLY cases. We guess which is which by looking
  at the targetted block that seems to either be a POP_TOP or a
  DUP_TOP in the case of an EXCEPT block;

- Implement RERAISE with a fake END_FINALLY;

- In Python 3.9+, skip the duplicated code from the FINALLY blocks
  with a jump in bytecode and a fake `END_FINALLY`.
@EchoStretch
Copy link

Fantastic update! I think this one works the best so far. There are still a few I'm not able to resolve, but I'm reviewing everyone’s repos to get more insights.

Unsupported opcode: LOAD_ASSERTION_ERROR
Unsupported opcode: LOAD_ASSERTION_ERROR
Unsupported opcode: LOAD_ASSERTION_ERROR
Warning: Stack history is not empty!
Warning: block stack is not empty!
Warning: block stack is not empty!
Warning: block stack is not empty!
Warning: Stack history is not empty!
Warning: block stack is not empty!
Unsupported opcode: LOAD_ASSERTION_ERROR
Unsupported opcode: LOAD_ASSERTION_ERROR
Warning: block stack is not empty!
Unsupported opcode: LOAD_ASSERTION_ERROR
Unsupported opcode: LOAD_ASSERTION_ERROR

@World-sudo
Copy link

was it merged?

@guihkx
Copy link

guihkx commented May 29, 2025

I'm getting a crash on this PR's branch that doesn't happen on master...

On master:

$ ./build/pycdc install.pyc -o install.py
Unsupported opcode: JUMP_IF_NOT_EXC_MATCH (210)
$ echo $?
0

On this PR:

$ ./build/pycdc install.pyc -o install.py
fish: Job 1, './build/pycdc install.pyc -o in…' terminated by signal SIGSEGV (Address boundary error)
gdb backtrace
$ gdb -ex run --args ./build/pycdc install.pyc -o install.py
Reading symbols from ./build/pycdc...
Starting program: /tmp/pycdc/build/pycdc install.pyc -o install.py
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x00005555555771c5 in PycRef<ASTBlock>::~PycRef (this=0x1f8) at /tmp/pycdc/pyc_object.h:30
30              if (m_obj)
(gdb) bt full
#0  0x00005555555771c5 in PycRef<ASTBlock>::~PycRef (this=0x1f8) at /tmp/pycdc/pyc_object.h:30
No locals.
#1  std::__new_allocator<PycRef<ASTBlock> >::destroy<PycRef<ASTBlock> > (this=0x7fffffffd6d0, __p=0x1f8) at /usr/include/c++/15.1.1/bits/new_allocator.h:198
No locals.
#2  std::allocator_traits<std::allocator<PycRef<ASTBlock> > >::destroy<PycRef<ASTBlock> > (__a=..., __p=0x1f8) at /usr/include/c++/15.1.1/bits/alloc_traits.h:696
No locals.
#3  std::deque<PycRef<ASTBlock>, std::allocator<PycRef<ASTBlock> > >::_M_pop_back_aux (this=0x7fffffffd6d0) at /usr/include/c++/15.1.1/bits/deque.tcc:566
No locals.
#4  std::deque<PycRef<ASTBlock>, std::allocator<PycRef<ASTBlock> > >::pop_back (this=0x7fffffffd6d0) at /usr/include/c++/15.1.1/bits/stl_deque.h:1675
No locals.
#5  std::stack<PycRef<ASTBlock>, std::deque<PycRef<ASTBlock>, std::allocator<PycRef<ASTBlock> > > >::pop (this=0x7fffffffd6d0) at /usr/include/c++/15.1.1/bits/stl_stack.h:334
No locals.
#6  BuildFromCode (code=..., mod=mod@entry=0x7fffffffd9f0) at /tmp/pycdc/ASTree.cpp:1332
        offs = 10
        prev = {m_obj = 0x5555555cba60}
        nil = {m_obj = 0x0}
        push = <optimized out>
        source = {<PycData> = {_vptr.PycData = 0x5555555b5480 <vtable for PycBuffer+16>}, m_buffer = 0x5555555cc860 "d", m_size = 970, m_pos = 396}
        stack = {m_stack = std::vector of length 10, capacity 10 = {{m_obj = 0x0}, {m_obj = 0x0}, {m_obj = 0x0}, {m_obj = 0x0}, {m_obj = 0x0}, {m_obj = 0x0}, {m_obj = 0x0}, {m_obj = 0x0}, {
              m_obj = 0x0}, {m_obj = 0x0}}, m_ptr = <optimized out>}
        stack_hist = <optimized out>
        blocks = <optimized out>
        defblock = <optimized out>
        curblock = {m_obj = 0x5555555cba60}
        opcode = 145
        operand = 5
        curpos = <optimized out>
        pos = 396
        unpack = 0
        else_pop = <optimized out>
        variable_annotations = false
#7  0x0000555555592e4d in decompyle (code=..., mod=mod@entry=0x7fffffffd9f0, pyc_output=...) at /tmp/pycdc/ASTree.cpp:3452
        source = <optimized out>
        clean = <optimized out>
        part1clean = <optimized out>
#8  0x00005555555685fe in main (argc=<optimized out>, argv=<optimized out>) at /tmp/pycdc/pycdc.cpp:97
        infile = <optimized out>
        marshalled = <optimized out>
        version = <optimized out>
        pyc_output = <optimized out>
        out_file = {<std::basic_ostream<char, std::char_traits<char> >> = {<std::basic_ios<char, std::char_traits<char> >> = {<std::ios_base> = {
                _vptr.ios_base = 0x7ffff7e88d88 <vtable for std::basic_ofstream<char, std::char_traits<char> >+64>, static boolalpha = std::_S_boolalpha, static dec = std::_S_dec,
                static fixed = std::_S_fixed, static hex = std::_S_hex, static internal = std::_S_internal, static left = std::_S_left, static oct = std::_S_oct,
                static right = std::_S_right, static scientific = std::_S_scientific, static showbase = std::_S_showbase, static showpoint = std::_S_showpoint,
                static showpos = std::_S_showpos, static skipws = std::_S_skipws, static unitbuf = std::_S_unitbuf, static uppercase = std::_S_uppercase,
                static adjustfield = std::_S_adjustfield, static basefield = std::_S_basefield, static floatfield = std::_S_floatfield, static badbit = std::_S_badbit,
                static eofbit = std::_S_eofbit, static failbit = std::_S_failbit, static goodbit = std::_S_goodbit, static app = std::_S_app, static ate = std::_S_ate,
                static binary = std::_S_bin, static in = std::_S_in, static out = std::_S_out, static trunc = std::_S_trunc, static __noreplace = std::_S_noreplace,
                static beg = std::_S_beg, static cur = std::_S_cur, static end = std::_S_end, _M_precision = 6, _M_width = 0, _M_flags = 4098, _M_exception = std::_S_goodbit,
                _M_streambuf_state = std::_S_goodbit, _M_callbacks = 0x0, _M_word_zero = {_M_pword = 0x0, _M_iword = 0}, _M_local_word = {{_M_pword = 0x0, _M_iword = 0}, {_M_pword = 0x0,
                    _M_iword = 0}, {_M_pword = 0x0, _M_iword = 0}, {_M_pword = 0x0, _M_iword = 0}, {_M_pword = 0x0, _M_iword = 0}, {_M_pword = 0x0, _M_iword = 0}, {_M_pword = 0x0,
                    _M_iword = 0}, {_M_pword = 0x0, _M_iword = 0}}, _M_word_size = 8, _M_word = 0x7fffffffdbb8, _M_ios_locale = std::locale = "C"}, _M_tie = 0x0, _M_fill = 32 ' ',
              _M_fill_init = true, _M_streambuf = 0x7fffffffda88, _M_ctype = 0x7ffff7e91920 <(anonymous namespace)::ctype_c>,
              _M_num_put = 0x7ffff7e918b0 <(anonymous namespace)::num_put_c>, _M_num_get = 0x7ffff7e918c0 <(anonymous namespace)::num_get_c>},
            _vptr.basic_ostream = 0x7ffff7e88d60 <vtable for std::basic_ofstream<char, std::char_traits<char> >+24>}, _M_filebuf = {<std::basic_streambuf<char, std::char_traits<char> >> = {
              _vptr.basic_streambuf = 0x7ffff7e88ba8 <vtable for std::basic_filebuf<char, std::char_traits<char> >+16>,
              _M_in_beg = 0x5555555c9530 "# Source Generated with Decompyle++\n# File: install.pyc (Python 3.10)\n\n",
              _M_in_cur = 0x5555555c9530 "# Source Generated with Decompyle++\n# File: install.pyc (Python 3.10)\n\n",
              _M_in_end = 0x5555555c9530 "# Source Generated with Decompyle++\n# File: install.pyc (Python 3.10)\n\n",
              _M_out_beg = 0x5555555c9530 "# Source Generated with Decompyle++\n# File: install.pyc (Python 3.10)\n\n", _M_out_cur = 0x5555555c9577 "", _M_out_end = 0x5555555cb52f "",
              _M_buf_locale = std::locale = "C"}, _M_lock = {__data = {__lock = 0, __count = 0, __owner = 0, __nusers = 0, __kind = 0, __spins = 0, __elision = 0, __list = {__prev = 0x0,
                  __next = 0x0}}, __size = '\000' <repeats 39 times>, __align = 0}, _M_file = {_M_cfile = 0x5555555c9350, _M_cfile_created = true}, _M_mode = std::_S_out, _M_state_beg = {
              __count = 0, __value = {__wch = 0, __wchb = "\000\000\000"}}, _M_state_cur = {__count = 0, __value = {__wch = 0, __wchb = "\000\000\000"}}, _M_state_last = {__count = 0,
              __value = {__wch = 0, __wchb = "\000\000\000"}}, _M_buf = 0x5555555c9530 "# Source Generated with Decompyle++\n# File: install.pyc (Python 3.10)\n\n", _M_buf_size = 8192,
            _M_buf_allocated = true, _M_reading = false, _M_writing = true, _M_pback = 0 '\000', _M_pback_cur_save = 0x0, _M_pback_end_save = 0x0, _M_pback_init = false,
            _M_codecvt = 0x7ffff7e91890 <(anonymous namespace)::codecvt_c>, _M_ext_buf = 0x0, _M_ext_buf_size = 0, _M_ext_next = 0x0, _M_ext_end = 0x0}}
        mod = {m_maj = 3, m_min = 10, m_unicode = true, m_code = {m_obj = 0x5555555cc730}, m_interns = std::vector of length 345, capacity 512 = {{m_obj = 0x5555555cd010}, {
              m_obj = 0x5555555cd120}, {m_obj = 0x5555555cd180}, {m_obj = 0x5555555cd1c0}, {m_obj = 0x5555555cd460}, {m_obj = 0x5555555ce1a0}, {m_obj = 0x5555555ce1e0}, {
              m_obj = 0x5555555ce220}, {m_obj = 0x5555555ce310}, {m_obj = 0x5555555ce640}, {m_obj = 0x5555555cea40}, {m_obj = 0x5555555cea80}, {m_obj = 0x5555555ceed0}, {
              m_obj = 0x5555555cf0a0}, {m_obj = 0x5555555cf280}, {m_obj = 0x5555555cf2c0}, {m_obj = 0x5555555cf600}, {m_obj = 0x5555555cf640}, {m_obj = 0x5555555cf680}, {
              m_obj = 0x5555555cf6c0}, {m_obj = 0x5555555cf700}, {m_obj = 0x5555555cf7a0}, {m_obj = 0x5555555cf7e0}, {m_obj = 0x5555555cf820}, {m_obj = 0x5555555cf970}, {
              m_obj = 0x5555555cf9b0}, {m_obj = 0x5555555cf9f0}, {m_obj = 0x5555555cfa30}, {m_obj = 0x5555555cfa70}, {m_obj = 0x5555555cfab0}, {m_obj = 0x5555555cfaf0}, {
              m_obj = 0x5555555cfb30}, {m_obj = 0x5555555cfb70}, {m_obj = 0x5555555cfbb0}, {m_obj = 0x5555555cfc70}, {m_obj = 0x5555555cfcb0}, {m_obj = 0x5555555cfcf0}, {
              m_obj = 0x5555555cfd30}, {m_obj = 0x5555555cfd70}, {m_obj = 0x5555555cfe70}, {m_obj = 0x5555555d0170}, {m_obj = 0x5555555d0250}, {m_obj = 0x5555555d0290}, {
              m_obj = 0x5555555d02d0}, {m_obj = 0x5555555d0340}, {m_obj = 0x5555555d0380}, {m_obj = 0x5555555d03c0}, {m_obj = 0x5555555d0400}, {m_obj = 0x5555555d0440}, {
              m_obj = 0x5555555d0480}, {m_obj = 0x5555555d0530}, {m_obj = 0x5555555d08a0}, {m_obj = 0x5555555d08e0}, {m_obj = 0x5555555d1130}, {m_obj = 0x5555555d11b0}, {
              m_obj = 0x5555555d1440}, {m_obj = 0x5555555d1480}, {m_obj = 0x5555555d1530}, {m_obj = 0x5555555d1570}, {m_obj = 0x5555555d15b0}, {m_obj = 0x5555555d1630}, {
              m_obj = 0x5555555d19a0}, {m_obj = 0x5555555d19e0}, {m_obj = 0x5555555d1a20}, {m_obj = 0x5555555d1a60}, {m_obj = 0x5555555d1aa0}, {m_obj = 0x5555555d1ae0}, {
              m_obj = 0x5555555d1b20}, {m_obj = 0x5555555d1b60}, {m_obj = 0x5555555d1ba0}, {m_obj = 0x5555555d1be0}, {m_obj = 0x5555555d1c80}, {m_obj = 0x5555555d1d00}, {
              m_obj = 0x5555555d20c0}, {m_obj = 0x5555555d2220}, {m_obj = 0x5555555d2260}, {m_obj = 0x5555555d22a0}, {m_obj = 0x5555555d22e0}, {m_obj = 0x5555555d23c0}, {
              m_obj = 0x5555555d2440}, {m_obj = 0x5555555d28f0}, {m_obj = 0x5555555d2930}, {m_obj = 0x5555555d29d0}, {m_obj = 0x5555555d2a10}, {m_obj = 0x5555555d2a90}, {
              m_obj = 0x5555555d2c60}, {m_obj = 0x5555555d2ce0}, {m_obj = 0x5555555d30a0}, {m_obj = 0x5555555d30e0}, {m_obj = 0x5555555d3120}, {m_obj = 0x5555555d3160}, {
              m_obj = 0x5555555d3200}, {m_obj = 0x5555555d3240}, {m_obj = 0x5555555d32c0}, {m_obj = 0x5555555d3660}, {m_obj = 0x5555555d3750}, {m_obj = 0x5555555d3790}, {
              m_obj = 0x5555555d37d0}, {m_obj = 0x5555555d3810}, {m_obj = 0x5555555d3850}, {m_obj = 0x5555555d3890}, {m_obj = 0x5555555d3970}, {m_obj = 0x5555555d3d30}, {
              m_obj = 0x5555555d3d70}, {m_obj = 0x5555555d3db0}, {m_obj = 0x5555555d3e90}, {m_obj = 0x5555555d3ed0}, {m_obj = 0x5555555d3f10}, {m_obj = 0x5555555d3f50}, {
              m_obj = 0x5555555d3fd0}, {m_obj = 0x5555555d43d0}, {m_obj = 0x5555555d4600}, {m_obj = 0x5555555d4640}, {m_obj = 0x5555555d4680}, {m_obj = 0x5555555d4730}, {
              m_obj = 0x5555555d4770}, {m_obj = 0x5555555d47e0}, {m_obj = 0x5555555d4890}, {m_obj = 0x5555555d4e40}, {m_obj = 0x5555555d4e80}, {m_obj = 0x5555555d4f00}, {
              m_obj = 0x5555555d0e10}, {m_obj = 0x5555555d0ed0}, {m_obj = 0x5555555d0f10}, {m_obj = 0x5555555d0f50}, {m_obj = 0x5555555d0f90}, {m_obj = 0x5555555d1010}, {
              m_obj = 0x5555555d6b70}, {m_obj = 0x5555555d6bf0}, {m_obj = 0x5555555d78f0}, {m_obj = 0x5555555d7ea0}, {m_obj = 0x5555555d7fb0}, {m_obj = 0x5555555d88c0}, {
              m_obj = 0x5555555d8900}, {m_obj = 0x5555555d8970}, {m_obj = 0x5555555d89b0}, {m_obj = 0x5555555d8a20}, {m_obj = 0x5555555d8a60}, {m_obj = 0x5555555d8aa0}, {
              m_obj = 0x5555555d8ae0}, {m_obj = 0x5555555d8b20}, {m_obj = 0x5555555d8b60}, {m_obj = 0x5555555d8ba0}, {m_obj = 0x5555555d8be0}, {m_obj = 0x5555555d8ca0}, {
              m_obj = 0x5555555d8ce0}, {m_obj = 0x5555555d8d20}, {m_obj = 0x5555555d8d60}, {m_obj = 0x5555555d8de0}, {m_obj = 0x5555555d9390}, {m_obj = 0x5555555d9670}, {
              m_obj = 0x5555555d96b0}, {m_obj = 0x5555555d96f0}, {m_obj = 0x5555555d9760}, {m_obj = 0x5555555d97a0}, {m_obj = 0x5555555d97e0}, {m_obj = 0x5555555d9820}, {
              m_obj = 0x5555555d9860}, {m_obj = 0x5555555d9910}, {m_obj = 0x5555555d9950}, {m_obj = 0x5555555d99d0}, {m_obj = 0x5555555d9e00}, {m_obj = 0x5555555d9f10}, {
              m_obj = 0x5555555da3d0}, {m_obj = 0x5555555da410}, {m_obj = 0x5555555da450}, {m_obj = 0x5555555da490}, {m_obj = 0x5555555da570}, {m_obj = 0x5555555da5b0}, {
              m_obj = 0x5555555da5f0}, {m_obj = 0x5555555da730}, {m_obj = 0x5555555da770}, {m_obj = 0x5555555da7b0}, {m_obj = 0x5555555da7f0}, {m_obj = 0x5555555da830}, {
              m_obj = 0x5555555da870}, {m_obj = 0x5555555da8e0}, {m_obj = 0x5555555da950}, {m_obj = 0x5555555da990}, {m_obj = 0x5555555daa00}, {m_obj = 0x5555555daad0}, {
              m_obj = 0x5555555dab50}, {m_obj = 0x5555555db0b0}, {m_obj = 0x5555555db0f0}, {m_obj = 0x5555555db130}, {m_obj = 0x5555555db170}, {m_obj = 0x5555555db1b0}, {
              m_obj = 0x5555555db230}, {m_obj = 0x5555555db270}, {m_obj = 0x5555555db2b0}, {m_obj = 0x5555555db310}, {m_obj = 0x5555555db350}, {m_obj = 0x5555555db390}, {
              m_obj = 0x5555555db520}, {m_obj = 0x5555555db560}, {m_obj = 0x5555555db5a0}, {m_obj = 0x5555555db610}, {m_obj = 0x5555555db6e0}, {m_obj = 0x5555555dbe70}, {
              m_obj = 0x5555555dbef0}...}, m_refs = std::vector of length 759, capacity 1024 = {{m_obj = 0x5555555cc730}, {m_obj = 0x5555555cc800}, {m_obj = 0x5555555cc7e0}, {
              m_obj = 0x5555555ccfd0}, {m_obj = 0x5555555cd010}, {m_obj = 0x5555555cd0c0}, {m_obj = 0x5555555cd120}, {m_obj = 0x5555555cd180}, {m_obj = 0x5555555cd1c0}, {
              m_obj = 0x5555555cd290}, {m_obj = 0x5555555cd300}, {m_obj = 0x5555555cd340}, {m_obj = 0x5555555cd3b0}, {m_obj = 0x5555555cd3f0}, {m_obj = 0x5555555cd460}, {
              m_obj = 0x5555555cd4a0}, {m_obj = 0x5555555cd4e0}, {m_obj = 0x5555555cd660}, {m_obj = 0x5555555cd6d0}, {m_obj = 0x5555555cd710}, {m_obj = 0x5555555cd780}, {
              m_obj = 0x5555555cd7f0}, {m_obj = 0x5555555cd860}, {m_obj = 0x5555555cd8a0}, {m_obj = 0x5555555cd910}, {m_obj = 0x5555555cd980}, {m_obj = 0x5555555cd9f0}, {
              m_obj = 0x5555555cda60}, {m_obj = 0x5555555cdad0}, {m_obj = 0x5555555cdb10}, {m_obj = 0x5555555cdb50}, {m_obj = 0x5555555cdb90}, {m_obj = 0x5555555cdc00}, {
              m_obj = 0x5555555cde80}, {m_obj = 0x5555555cdef0}, {m_obj = 0x5555555cdf30}, {m_obj = 0x5555555cdf70}, {m_obj = 0x5555555cdff0}, {m_obj = 0x5555555ce060}, {
              m_obj = 0x5555555ce0d0}, {m_obj = 0x5555555ce160}, {m_obj = 0x5555555ce1a0}, {m_obj = 0x5555555ce1e0}, {m_obj = 0x5555555ce220}, {m_obj = 0x5555555ce260}, {
              m_obj = 0x5555555ce2a0}, {m_obj = 0x5555555ce310}, {m_obj = 0x5555555ce350}, {m_obj = 0x5555555ce3f0}, {m_obj = 0x5555555ce460}, {m_obj = 0x5555555ce4e0}, {
              m_obj = 0x5555555ce520}, {m_obj = 0x5555555ce640}, {m_obj = 0x5555555ce680}, {m_obj = 0x5555555ce700}, {m_obj = 0x5555555ce740}, {m_obj = 0x5555555ce7b0}, {
              m_obj = 0x5555555ce7f0}, {m_obj = 0x5555555ce830}, {m_obj = 0x5555555ce870}, {m_obj = 0x5555555ce8f0}, {m_obj = 0x5555555ce960}, {m_obj = 0x5555555ce9d0}, {
              m_obj = 0x5555555cea40}, {m_obj = 0x5555555cea80}, {m_obj = 0x5555555ceed0}, {m_obj = 0x5555555cef10}, {m_obj = 0x5555555cef30}, {m_obj = 0x5555555cefa0}, {
              m_obj = 0x5555555cf030}, {m_obj = 0x5555555cf0a0}, {m_obj = 0x5555555cf0e0}, {m_obj = 0x5555555cf1a0}, {m_obj = 0x5555555cf240}, {m_obj = 0x5555555cf280}, {
              m_obj = 0x5555555cf2c0}, {m_obj = 0x5555555cf3b0}, {m_obj = 0x5555555cf550}, {m_obj = 0x5555555cf590}, {m_obj = 0x5555555cf600}, {m_obj = 0x5555555cf640}, {
              m_obj = 0x5555555cf680}, {m_obj = 0x5555555cf6c0}, {m_obj = 0x5555555cf700}, {m_obj = 0x5555555cf740}, {m_obj = 0x5555555cf7a0}, {m_obj = 0x5555555cf7e0}, {
              m_obj = 0x5555555cf820}, {m_obj = 0x5555555cf860}, {m_obj = 0x5555555cf8a0}, {m_obj = 0x5555555cf8c0}, {m_obj = 0x5555555cf970}, {m_obj = 0x5555555cf9b0}, {
              m_obj = 0x5555555cf9f0}, {m_obj = 0x5555555cfa30}, {m_obj = 0x5555555cfa70}, {m_obj = 0x5555555cfab0}, {m_obj = 0x5555555cfaf0}, {m_obj = 0x5555555cfb30}, {
              m_obj = 0x5555555cfb70}, {m_obj = 0x5555555cfbb0}, {m_obj = 0x5555555cfbf0}, {m_obj = 0x5555555cfc70}, {m_obj = 0x5555555cfcb0}, {m_obj = 0x5555555cfcf0}, {
              m_obj = 0x5555555cfd30}, {m_obj = 0x5555555cfd70}, {m_obj = 0x5555555cfdf0}, {m_obj = 0x5555555cfe30}, {m_obj = 0x5555555cfe70}, {m_obj = 0x5555555cfef0}, {
              m_obj = 0x5555555d0070}, {m_obj = 0x5555555d0170}, {m_obj = 0x5555555d01b0}, {m_obj = 0x5555555d0250}, {m_obj = 0x5555555d0290}, {m_obj = 0x5555555d02d0}, {
              m_obj = 0x5555555d0340}, {m_obj = 0x5555555d0380}, {m_obj = 0x5555555d03c0}, {m_obj = 0x5555555d0400}, {m_obj = 0x5555555d0440}, {m_obj = 0x5555555d0480}, {
              m_obj = 0x5555555d0530}, {m_obj = 0x5555555d05e0}, {m_obj = 0x5555555d0740}, {m_obj = 0x5555555d0840}, {m_obj = 0x5555555d08a0}, {m_obj = 0x5555555d08e0}, {
              m_obj = 0x5555555d1130}, {m_obj = 0x5555555d1170}, {m_obj = 0x5555555d11b0}, {m_obj = 0x5555555d11f0}, {m_obj = 0x5555555d1230}, {m_obj = 0x5555555d1270}, {
              m_obj = 0x5555555d1290}, {m_obj = 0x5555555d12d0}, {m_obj = 0x5555555d1310}, {m_obj = 0x5555555d1350}, {m_obj = 0x5555555d13c0}, {m_obj = 0x5555555d1440}, {
              m_obj = 0x5555555d1480}, {m_obj = 0x5555555d14c0}, {m_obj = 0x5555555d1530}, {m_obj = 0x5555555d1570}, {m_obj = 0x5555555d15b0}, {m_obj = 0x5555555d1630}, {
              m_obj = 0x5555555d16b0}, {m_obj = 0x5555555d1820}, {m_obj = 0x5555555d1900}, {m_obj = 0x5555555d19a0}, {m_obj = 0x5555555d19e0}, {m_obj = 0x5555555d1a20}, {
              m_obj = 0x5555555d1a60}, {m_obj = 0x5555555d1aa0}, {m_obj = 0x5555555d1ae0}, {m_obj = 0x5555555d1b20}, {m_obj = 0x5555555d1b60}, {m_obj = 0x5555555d1ba0}, {
              m_obj = 0x5555555d1be0}, {m_obj = 0x5555555d1c20}, {m_obj = 0x5555555d1c80}, {m_obj = 0x5555555d1d00}, {m_obj = 0x5555555d1db0}, {m_obj = 0x5555555d1ee0}, {
              m_obj = 0x5555555d2080}, {m_obj = 0x5555555d20c0}, {m_obj = 0x5555555d2100}, {m_obj = 0x5555555d2170}, {m_obj = 0x5555555d2220}, {m_obj = 0x5555555d2260}, {
              m_obj = 0x5555555d22a0}, {m_obj = 0x5555555d22e0}, {m_obj = 0x5555555d2350}, {m_obj = 0x5555555d23c0}, {m_obj = 0x5555555d2440}, {m_obj = 0x5555555d24f0}, {
              m_obj = 0x5555555d2650}, {m_obj = 0x5555555d27d0}, {m_obj = 0x5555555d2880}, {m_obj = 0x5555555d28f0}, {m_obj = 0x5555555d2930}, {m_obj = 0x5555555d2970}, {
              m_obj = 0x5555555d29d0}, {m_obj = 0x5555555d2a10}, {m_obj = 0x5555555d2a90}, {m_obj = 0x5555555d2b10}, {m_obj = 0x5555555d2b90}, {m_obj = 0x5555555d2c00}, {
              m_obj = 0x5555555d2c60}, {m_obj = 0x5555555d2ce0}, {m_obj = 0x5555555d2d60}, {m_obj = 0x5555555d2e90}, {m_obj = 0x5555555d2fa0}, {m_obj = 0x5555555d3010}, {
              m_obj = 0x5555555d30a0}, {m_obj = 0x5555555d30e0}, {m_obj = 0x5555555d3120}, {m_obj = 0x5555555d3160}, {m_obj = 0x5555555d31a0}...}}
        dispname = 0x7fffffffe2c6 "install.pyc"
(gdb) quit

@plusls
Copy link

plusls commented Sep 3, 2025

any progress?

@Levak
Copy link
Contributor Author

Levak commented Sep 3, 2025

any progress?

No, I gave up on the project when I realized that new Python bytecode requires context checking trees rather than per-bytecode translation. Newer Python like 3.8+ optimize more and more the bytecode to remove unnecessary instructions for the execution which inherently destroys the one-to-one bijection that was before, where one instruction could result in only one step/line of python code .

I used this tool and my fork to do the heavy lifting of decompiling a python 3.9 program I needed the sources of to run on linux, and when it would fail to decompile, I would decompile by hand the bytecode. I managed to decompile what I needed then I moved to other things. Seeing that the project is basically too anchored in previous versions of Python, it needs a complete rewrite for python 3.9+ I simply stopped all work.

I haven't looked ever since if there was any better suited decompiler for python 3.8+ since I left this PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants