Handle more ifelse reduction rules patterns

This commit is contained in:
rocky
2020-06-27 09:10:27 -04:00
parent 11be90758f
commit 5cc572147a

View File

@@ -105,6 +105,24 @@ IFELSE_STMT_RULES = frozenset(
"opt_come_from_except", "opt_come_from_except",
), ),
), ),
(
"ifelsestmt",
(
"testexpr",
"stmts",
"jf_cfs",
"\\e_else_suite_opt",
"\\e_opt_come_from_except")
),
(
"ifelsestmt",
(
"testexpr",
"stmts",
"jf_cfs",
"\\e_else_suite_opt",
"opt_come_from_except")
),
]) ])
def ifelsestmt(self, lhs, n, rule, ast, tokens, first, last): def ifelsestmt(self, lhs, n, rule, ast, tokens, first, last):
@@ -113,6 +131,11 @@ def ifelsestmt(self, lhs, n, rule, ast, tokens, first, last):
# ifelsestmt jumped outside of loop. No good. # ifelsestmt jumped outside of loop. No good.
return True return True
# print("XXX", first, last)
# for t in range(first, last):
# print(tokens[t])
# print("=" * 30)
if rule not in IFELSE_STMT_RULES: if rule not in IFELSE_STMT_RULES:
# print("XXX", rule) # print("XXX", rule)
return False return False
@@ -186,9 +209,7 @@ def ifelsestmt(self, lhs, n, rule, ast, tokens, first, last):
if jump_else_end == "jf_cf_pop": if jump_else_end == "jf_cf_pop":
jump_else_end = jump_else_end[0] jump_else_end = jump_else_end[0]
jump_to_jump = False
if jump_else_end == "JUMP_FORWARD": if jump_else_end == "JUMP_FORWARD":
jump_to_jump = True
endif_target = int(jump_else_end.pattr) endif_target = int(jump_else_end.pattr)
last_offset = tokens[last].off2int() last_offset = tokens[last].off2int()
if endif_target != last_offset: if endif_target != last_offset: