You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-04 09:22:40 +08:00
WIP redo try/except for Python3
This commit is contained in:
@@ -5,23 +5,23 @@
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
x = 1
|
x = 1
|
||||||
except:
|
except RuntimeError as e:
|
||||||
pass
|
y = 2
|
||||||
|
|
||||||
# Tests:
|
# # Tests:
|
||||||
# trystmt ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
|
# # trystmt ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
|
||||||
# try_middle COME_FROM
|
# # try_middle COME_FROM
|
||||||
# except_stmt ::= except_cond1 except_suite
|
# # except_stmt ::= except_cond1 except_suite
|
||||||
# except_suite ::= ...
|
# # except_suite ::= ...
|
||||||
|
|
||||||
try:
|
# try:
|
||||||
x = 1
|
# x = 1
|
||||||
except ImportError:
|
# except ImportError:
|
||||||
pass
|
# pass
|
||||||
|
|
||||||
try:
|
# try:
|
||||||
x = 2
|
# x = 2
|
||||||
except ImportError:
|
# except ImportError:
|
||||||
x = 3
|
# x = 3
|
||||||
finally:
|
# finally:
|
||||||
x = 4
|
# x = 4
|
||||||
|
@@ -407,6 +407,11 @@ class Python2Parser(PythonParser):
|
|||||||
trystmt ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
|
trystmt ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
|
||||||
try_middle COME_FROM
|
try_middle COME_FROM
|
||||||
|
|
||||||
|
# this is nested inside a trystmt
|
||||||
|
tryfinallystmt ::= SETUP_FINALLY suite_stmts
|
||||||
|
POP_BLOCK LOAD_CONST
|
||||||
|
COME_FROM suite_stmts_opt END_FINALLY
|
||||||
|
|
||||||
tryelsestmt ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
|
tryelsestmt ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
|
||||||
try_middle else_suite COME_FROM
|
try_middle else_suite COME_FROM
|
||||||
|
|
||||||
@@ -445,10 +450,6 @@ class Python2Parser(PythonParser):
|
|||||||
jmp_abs ::= JUMP_ABSOLUTE
|
jmp_abs ::= JUMP_ABSOLUTE
|
||||||
jmp_abs ::= JUMP_BACK
|
jmp_abs ::= JUMP_BACK
|
||||||
|
|
||||||
tryfinallystmt ::= SETUP_FINALLY suite_stmts
|
|
||||||
POP_BLOCK LOAD_CONST
|
|
||||||
COME_FROM suite_stmts_opt END_FINALLY
|
|
||||||
|
|
||||||
withstmt ::= expr SETUP_WITH POP_TOP suite_stmts_opt
|
withstmt ::= expr SETUP_WITH POP_TOP suite_stmts_opt
|
||||||
POP_BLOCK LOAD_CONST COME_FROM
|
POP_BLOCK LOAD_CONST COME_FROM
|
||||||
WITH_CLEANUP END_FINALLY
|
WITH_CLEANUP END_FINALLY
|
||||||
|
@@ -425,17 +425,12 @@ class Python3Parser(PythonParser):
|
|||||||
trystmt ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
|
trystmt ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
|
||||||
try_middle COME_FROM
|
try_middle COME_FROM
|
||||||
|
|
||||||
tryfinallystmt ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
|
# this is nested inside a trystmt
|
||||||
try_middle
|
|
||||||
POP_TOP SETUP_FINALLY POP_BLOCK POP_EXCEPT LOAD_CONST
|
|
||||||
COME_FROM suite_stmts END_FINALLY
|
|
||||||
JUMP_FORWARD END_FINALLY COME_FROM COME_FROM
|
|
||||||
|
|
||||||
tryfinallystmt ::= SETUP_FINALLY suite_stmts
|
tryfinallystmt ::= SETUP_FINALLY suite_stmts
|
||||||
POP_BLOCK LOAD_CONST
|
POP_BLOCK LOAD_CONST
|
||||||
COME_FROM suite_stmts END_FINALLY
|
COME_FROM suite_stmts_opt END_FINALLY
|
||||||
|
|
||||||
tryelsestmt ::= SETUP_EXCEPT suite_stmts_opt
|
tryelsestmt ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
|
||||||
try_middle else_suite COME_FROM
|
try_middle else_suite COME_FROM
|
||||||
|
|
||||||
tryelsestmtc ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
|
tryelsestmtc ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
|
||||||
@@ -444,30 +439,36 @@ class Python3Parser(PythonParser):
|
|||||||
tryelsestmtl ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
|
tryelsestmtl ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
|
||||||
try_middle else_suitel COME_FROM
|
try_middle else_suitel COME_FROM
|
||||||
|
|
||||||
try_middle ::= jmp_abs COME_FROM except_stmts END_FINALLY
|
try_middle ::= jmp_abs COME_FROM except_stmts
|
||||||
|
END_FINALLY
|
||||||
try_middle ::= JUMP_FORWARD COME_FROM except_stmts
|
try_middle ::= JUMP_FORWARD COME_FROM except_stmts
|
||||||
END_FINALLY COME_FROM
|
END_FINALLY COME_FROM
|
||||||
try_middle ::= JUMP_FORWARD COME_FROM except_cond2
|
|
||||||
|
|
||||||
|
|
||||||
except_stmts ::= except_stmts except_stmt
|
except_stmts ::= except_stmts except_stmt
|
||||||
except_stmts ::= except_stmt
|
except_stmts ::= except_stmt
|
||||||
|
|
||||||
except_stmt ::= except_cond1 except_suite
|
except_stmt ::= except_cond1 except_suite
|
||||||
except_stmt ::= except_cond2 except_suite
|
except_stmt ::= except_cond2 except_suite
|
||||||
except_stmt ::= except_cond2 except_suite
|
|
||||||
except_stmt ::= except
|
except_stmt ::= except
|
||||||
|
|
||||||
# Python3 introduced POP_EXCEPT
|
# Python3 introduced POP_EXCEPT
|
||||||
except_suite ::= c_stmts_opt POP_EXCEPT JUMP_FORWARD
|
except_suite ::= c_stmts_opt POP_EXCEPT JUMP_FORWARD
|
||||||
except_suite ::= c_stmts_opt POP_EXCEPT jmp_abs
|
except_suite ::= c_stmts_opt POP_EXCEPT jmp_abs
|
||||||
|
|
||||||
|
# This is used in Python 3 in
|
||||||
|
# "except ... as e" to remove 'e' after the c_stmts_opt finishes
|
||||||
|
except_suite ::= SETUP_FINALLY c_stmts_opt
|
||||||
|
POP_BLOCK POP_EXCEPT LOAD_CONST COME_FROM LOAD_CONST
|
||||||
|
STORE_NAME DELETE_NAME END_FINALLY
|
||||||
|
JUMP_FORWARD
|
||||||
|
|
||||||
except_suite ::= return_stmts
|
except_suite ::= return_stmts
|
||||||
|
|
||||||
except_cond1 ::= DUP_TOP expr COMPARE_OP
|
except_cond1 ::= DUP_TOP expr COMPARE_OP
|
||||||
jmp_false POP_TOP POP_TOP POP_TOP
|
jmp_false POP_TOP POP_TOP POP_TOP
|
||||||
|
|
||||||
except_cond2 ::= DUP_TOP expr COMPARE_OP
|
except_cond2 ::= DUP_TOP expr COMPARE_OP
|
||||||
jmp_false POP_TOP designator
|
jmp_false POP_TOP designator POP_TOP
|
||||||
|
|
||||||
except ::= POP_TOP POP_TOP POP_TOP POP_EXCEPT c_stmts_opt JUMP_FORWARD
|
except ::= POP_TOP POP_TOP POP_TOP POP_EXCEPT c_stmts_opt JUMP_FORWARD
|
||||||
except ::= POP_TOP POP_TOP POP_TOP c_stmts_opt JUMP_FORWARD
|
except ::= POP_TOP POP_TOP POP_TOP c_stmts_opt JUMP_FORWARD
|
||||||
|
Reference in New Issue
Block a user