From 5cc572147ac3feb670e080b4d2a039f9e0076ef7 Mon Sep 17 00:00:00 2001 From: rocky Date: Sat, 27 Jun 2020 09:10:27 -0400 Subject: [PATCH] Handle more ifelse reduction rules patterns --- uncompyle6/parsers/reducecheck/ifelsestmt.py | 25 ++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/uncompyle6/parsers/reducecheck/ifelsestmt.py b/uncompyle6/parsers/reducecheck/ifelsestmt.py index 8f7f6339..8ec252e2 100644 --- a/uncompyle6/parsers/reducecheck/ifelsestmt.py +++ b/uncompyle6/parsers/reducecheck/ifelsestmt.py @@ -105,6 +105,24 @@ IFELSE_STMT_RULES = frozenset( "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): @@ -113,6 +131,11 @@ def ifelsestmt(self, lhs, n, rule, ast, tokens, first, last): # ifelsestmt jumped outside of loop. No good. return True + # print("XXX", first, last) + # for t in range(first, last): + # print(tokens[t]) + # print("=" * 30) + if rule not in IFELSE_STMT_RULES: # print("XXX", rule) return False @@ -186,9 +209,7 @@ def ifelsestmt(self, lhs, n, rule, ast, tokens, first, last): if jump_else_end == "jf_cf_pop": jump_else_end = jump_else_end[0] - jump_to_jump = False if jump_else_end == "JUMP_FORWARD": - jump_to_jump = True endif_target = int(jump_else_end.pattr) last_offset = tokens[last].off2int() if endif_target != last_offset: