-
Notifications
You must be signed in to change notification settings - Fork 730
Implement Python 3.8 && 3.9 try-except-finally logic #493
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
- 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`.
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 |
was it merged? |
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 |
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 fakeCMP_EXCEPTION
followed by aPOP_JUMP_IF_TRUE
;Implement
BEGIN_FINALLY
with a fakeLOAD_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 aPOP_TOP
or aDUP_TOP
in the case of an EXCEPT block;Implement
RERAISE
with a fakeEND_FINALLY
;In Python 3.9+, emulate a
BEGIN_FINALLY
whenPOP_BLOCK
is not followed by aJUMP_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
.