From 8836444be23eaf83163c243aa6a8e9b9ca7750cd Mon Sep 17 00:00:00 2001 From: rocky Date: Sun, 9 Feb 2020 08:14:44 -0500 Subject: [PATCH] Correct ifelsestmtc rules for 3.x --- uncompyle6/parsers/parse3.py | 2 +- uncompyle6/parsers/reducecheck/ifelsestmt.py | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/uncompyle6/parsers/parse3.py b/uncompyle6/parsers/parse3.py index b56384ac..fd3b103f 100644 --- a/uncompyle6/parsers/parse3.py +++ b/uncompyle6/parsers/parse3.py @@ -1534,7 +1534,7 @@ class Python3Parser(PythonParser): "except_handler_else": except_handler_else, # "ifstmt": ifstmt, "ifstmtl": ifstmt, - "ifelsestmtc": ifstmt, + "ifelsestmtc": ifelsestmt, "ifelsestmt": ifelsestmt, "or": or_check, "testtrue": testtrue, diff --git a/uncompyle6/parsers/reducecheck/ifelsestmt.py b/uncompyle6/parsers/reducecheck/ifelsestmt.py index cf5443cd..319b9bd9 100644 --- a/uncompyle6/parsers/reducecheck/ifelsestmt.py +++ b/uncompyle6/parsers/reducecheck/ifelsestmt.py @@ -33,6 +33,15 @@ IFELSE_STMT_RULES = frozenset( "else_suitec", ), ), + ( + "ifelsestmtc", + ( + "testexpr", + "c_stmts_opt", + "jump_absolute_else", + "else_suitec" + ), + ), ( "ifelsestmt", ( @@ -79,7 +88,8 @@ IFELSE_STMT_RULES = frozenset( ]) def ifelsestmt(self, lhs, n, rule, ast, tokens, first, last): - if (last + 1) < n and tokens[last + 1] == "COME_FROM_LOOP": + + if (last + 1) < n and tokens[last + 1] == "COME_FROM_LOOP" and lhs != "ifelsestmtc": # ifelsestmt jumped outside of loop. No good. return True