You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-03 00:45:53 +08:00
Need more precise "assert" for 3.8...
Add rule for ifelsestmtl which is needed in 3.8
This commit is contained in:
@@ -1532,7 +1532,7 @@ class Python3Parser(PythonParser):
|
|||||||
# FIXME: Put more in this table
|
# FIXME: Put more in this table
|
||||||
self.reduce_check_table = {
|
self.reduce_check_table = {
|
||||||
"except_handler_else": except_handler_else,
|
"except_handler_else": except_handler_else,
|
||||||
# "ifstmt": ifstmt,
|
"ifstmt": ifstmt,
|
||||||
"ifstmtl": ifstmt,
|
"ifstmtl": ifstmt,
|
||||||
"ifelsestmtc": ifstmt,
|
"ifelsestmtc": ifstmt,
|
||||||
"ifelsestmt": ifelsestmt,
|
"ifelsestmt": ifelsestmt,
|
||||||
|
@@ -982,11 +982,12 @@ class Python37Parser(Python37BaseParser):
|
|||||||
return_stmt_lambda ::= ret_expr RETURN_VALUE_LAMBDA
|
return_stmt_lambda ::= ret_expr RETURN_VALUE_LAMBDA
|
||||||
return_if_lambda ::= RETURN_END_IF_LAMBDA
|
return_if_lambda ::= RETURN_END_IF_LAMBDA
|
||||||
|
|
||||||
stmt ::= return_closure
|
stmt ::= return_closure
|
||||||
return_closure ::= LOAD_CLOSURE RETURN_VALUE RETURN_LAST
|
return_closure ::= LOAD_CLOSURE RETURN_VALUE RETURN_LAST
|
||||||
|
|
||||||
stmt ::= whileTruestmt
|
stmt ::= whileTruestmt
|
||||||
ifelsestmt ::= testexpr c_stmts_opt JUMP_FORWARD else_suite _come_froms
|
ifelsestmt ::= testexpr c_stmts_opt JUMP_FORWARD else_suite _come_froms
|
||||||
|
ifelsestmtl ::= testexpr c_stmts_opt jump_forward_else else_suitec
|
||||||
|
|
||||||
ifstmtl ::= testexpr _ifstmts_jumpl
|
ifstmtl ::= testexpr _ifstmts_jumpl
|
||||||
|
|
||||||
|
@@ -87,11 +87,16 @@ def ifelsestmt(self, lhs, n, rule, ast, tokens, first, last):
|
|||||||
if rule not in IFELSE_STMT_RULES:
|
if rule not in IFELSE_STMT_RULES:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Avoid if/else where the "then" is a "raise_stmt1". Parse this
|
# Avoid if/else where the "then" is a "raise_stmt1" for an
|
||||||
# as an "assert" instead.
|
# assert statemetn. Parse this as an "assert" instead.
|
||||||
stmts = ast[1]
|
stmts = ast[1]
|
||||||
if stmts in ("c_stmts",) and len(stmts) == 1 and stmts[0] == "raise_stmt1":
|
if stmts in ("c_stmts",) and len(stmts) == 1:
|
||||||
return True
|
raise_stmt1 = stmts[0]
|
||||||
|
if (
|
||||||
|
raise_stmt1 == "raise_stmt1" and
|
||||||
|
raise_stmt1[0] in ("LOAD_ASSERT",)
|
||||||
|
):
|
||||||
|
return True
|
||||||
|
|
||||||
# Make sure all of the "come froms" offset at the
|
# Make sure all of the "come froms" offset at the
|
||||||
# end of the "if" come from somewhere inside the "if".
|
# end of the "if" come from somewhere inside the "if".
|
||||||
|
Reference in New Issue
Block a user