diff --git a/test/bytecode_3.0/02_try_except_except.pyc b/test/bytecode_3.0/02_try_except_except.pyc new file mode 100644 index 00000000..2d655465 Binary files /dev/null and b/test/bytecode_3.0/02_try_except_except.pyc differ diff --git a/test/simple_source/bug30/02_try_except_except.py b/test/simple_source/bug30/02_try_except_except.py new file mode 100644 index 00000000..56c729a9 --- /dev/null +++ b/test/simple_source/bug30/02_try_except_except.py @@ -0,0 +1,9 @@ +# From 3.0.1/lib/python3.0/_dummy_thread.py + +def start_new_thread(function, args, kwargs={}): + try: + function() + except SystemExit: + pass + except: + args() diff --git a/uncompyle6/parsers/parse30.py b/uncompyle6/parsers/parse30.py index 4bcb36e1..81f5e5d1 100644 --- a/uncompyle6/parsers/parse30.py +++ b/uncompyle6/parsers/parse30.py @@ -65,11 +65,12 @@ class Python30Parser(Python31Parser): comp_iter ::= expr expr SET_ADD comp_iter ::= expr expr LIST_APPEND - jump_forward_else ::= JUMP_FORWARD POP_TOP - jump_absolute_else ::= JUMP_ABSOLUTE POP_TOP - except_suite ::= c_stmts POP_EXCEPT jump_except POP_TOP + jump_forward_else ::= JUMP_FORWARD POP_TOP + jump_absolute_else ::= JUMP_ABSOLUTE POP_TOP + except_suite ::= c_stmts POP_EXCEPT jump_except POP_TOP except_suite_finalize ::= SETUP_FINALLY c_stmts_opt except_var_finalize END_FINALLY _jump POP_TOP + jump_except ::= JUMP_FORWARD POP_TOP # In many ways 3.0 is like 2.6. The below rules in fact are the same or similar.