From ea36ff9bb13ce7041dc0c77e7155677abca6b647 Mon Sep 17 00:00:00 2001 From: rocky Date: Sat, 13 Jul 2024 15:57:24 -0400 Subject: [PATCH] Add grammar rule involving RETURN_END_IF --- test/simple_source/bug35/02_for_else_bug.py | 10 ++++++++++ uncompyle6/parsers/parse35.py | 2 ++ uncompyle6/semantics/consts.py | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 test/simple_source/bug35/02_for_else_bug.py diff --git a/test/simple_source/bug35/02_for_else_bug.py b/test/simple_source/bug35/02_for_else_bug.py new file mode 100644 index 000000000..c8f85ad8c --- /dev/null +++ b/test/simple_source/bug35/02_for_else_bug.py @@ -0,0 +1,10 @@ +# Adapted 3.5 from _bootstrap_external.py + + +def spec_from_file_location(loader, location): + if loader: + for _ in __file__: + if location: + break + else: + return None diff --git a/uncompyle6/parsers/parse35.py b/uncompyle6/parsers/parse35.py index fd2bd5cc6..e5bc9b10d 100644 --- a/uncompyle6/parsers/parse35.py +++ b/uncompyle6/parsers/parse35.py @@ -111,6 +111,8 @@ def p_35on(self, args): return_if_stmt ::= return_expr RETURN_END_IF POP_BLOCK return_if_lambda ::= RETURN_END_IF_LAMBDA COME_FROM + return ::= return_expr RETURN_END_IF + jb_else ::= JUMP_BACK ELSE ifelsestmtc ::= testexpr c_stmts_opt JUMP_FORWARD else_suitec ifelsestmtl ::= testexpr c_stmts_opt jb_else else_suitel diff --git a/uncompyle6/semantics/consts.py b/uncompyle6/semantics/consts.py index 7b9cd7d1e..7ea9967bc 100644 --- a/uncompyle6/semantics/consts.py +++ b/uncompyle6/semantics/consts.py @@ -431,7 +431,7 @@ "mkfuncdeco": ("%|@%c\n%c", (0, "expr"), 1), # A custom rule in n_function def distinguishes whether to call this or # function_def_async - "mkfuncdeco0": ("%|def %c\n", (0, "mkfunc")), + "mkfuncdeco0": ("%|def %c\n", (0, ("mkfunc", "mkfunc_annotate"))), # In cases where we desire an explict new line. # After docstrings which are followed by a "def" is