Need more precise "assert" for 3.8...

Add rule for ifelsestmtl which is needed in 3.8
This commit is contained in:
rocky
2020-02-08 11:46:19 -05:00
parent 7c73536b4a
commit b0931275a2
3 changed files with 15 additions and 9 deletions

View File

@@ -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,

View File

@@ -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

View File

@@ -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".