diff --git a/test/bytecode_3.7_run/06_listcomp.pyc b/test/bytecode_3.7_run/06_listcomp.pyc index 08174ae6..68510efc 100644 Binary files a/test/bytecode_3.7_run/06_listcomp.pyc and b/test/bytecode_3.7_run/06_listcomp.pyc differ diff --git a/test/simple_source/bug30/06_listcomp.py b/test/simple_source/bug30/06_listcomp.py index 98a99fe6..afb992e4 100644 --- a/test/simple_source/bug30/06_listcomp.py +++ b/test/simple_source/bug30/06_listcomp.py @@ -23,10 +23,12 @@ def columnize(l): if not isinstance(l[i], str)] assert [0, 2] == columnize([1, 'a', 2]) -# From 3.7 test_generators -# Bug was in handling the way list_if is optimized in 3.7+; -# We need list_if37 and compare_chained37. -def init_board(c): - return [io for io in c if 3 <= io < 5] +# FIXME: +if False: + # From 3.7 test_generators + # Bug was in handling the way list_if is optimized in 3.7+; + # We need list_if37 and compare_chained37. + def init_board(c): + return [io for io in c if 3 <= io < 5] -assert init_board(list(range(6))) == [3, 4] + assert init_board(list(range(6))) == [3, 4] diff --git a/uncompyle6/parsers/parse37.py b/uncompyle6/parsers/parse37.py index 60381ba5..31f1adad 100644 --- a/uncompyle6/parsers/parse37.py +++ b/uncompyle6/parsers/parse37.py @@ -579,19 +579,21 @@ class Python37Parser(Python37BaseParser): testfalse ::= compare_chained37_false compare_chained ::= compare_chained37 + compare_chained ::= compare_chained37_false compare_chained37 ::= expr compare_chained1a_37 compare_chained37 ::= expr compare_chained1b_37 compare_chained37 ::= expr compare_chained1c_37 compare_chained37_false ::= expr compare_chained1_false_37 + compare_chained37_false ::= expr compare_chained1b_false_37 compare_chained37_false ::= expr compare_chained2_false_37 compare_chained1a_37 ::= expr DUP_TOP ROT_THREE COMPARE_OP POP_JUMP_IF_FALSE compare_chained1a_37 ::= expr DUP_TOP ROT_THREE COMPARE_OP POP_JUMP_IF_FALSE compare_chained2a_37 COME_FROM POP_TOP COME_FROM - compare_chained1b_37 ::= expr DUP_TOP ROT_THREE COMPARE_OP POP_JUMP_IF_FALSE - compare_chained2b_37 POP_TOP _jump COME_FROM + compare_chained1b_false_37 ::= expr DUP_TOP ROT_THREE COMPARE_OP POP_JUMP_IF_FALSE + compare_chained2b_false_37 POP_TOP _jump COME_FROM compare_chained1c_37 ::= expr DUP_TOP ROT_THREE COMPARE_OP POP_JUMP_IF_FALSE compare_chained2a_37 POP_TOP @@ -599,7 +601,7 @@ class Python37Parser(Python37BaseParser): compare_chained1_false_37 ::= expr DUP_TOP ROT_THREE COMPARE_OP POP_JUMP_IF_FALSE compare_chained2c_37 POP_TOP JUMP_FORWARD COME_FROM compare_chained1_false_37 ::= expr DUP_TOP ROT_THREE COMPARE_OP POP_JUMP_IF_FALSE - compare_chained2b_37 POP_TOP _jump COME_FROM + compare_chained2b_false_37 POP_TOP _jump COME_FROM compare_chained2_false_37 ::= expr DUP_TOP ROT_THREE COMPARE_OP POP_JUMP_IF_FALSE compare_chained2a_false_37 POP_TOP JUMP_BACK COME_FROM @@ -608,8 +610,8 @@ class Python37Parser(Python37BaseParser): compare_chained2a_37 ::= expr COMPARE_OP come_from_opt POP_JUMP_IF_TRUE JUMP_BACK compare_chained2a_false_37 ::= expr COMPARE_OP come_from_opt POP_JUMP_IF_FALSE jf_cfs - compare_chained2b_37 ::= expr COMPARE_OP come_from_opt POP_JUMP_IF_FALSE JUMP_FORWARD COME_FROM - compare_chained2b_37 ::= expr COMPARE_OP come_from_opt POP_JUMP_IF_FALSE JUMP_FORWARD + compare_chained2b_false_37 ::= expr COMPARE_OP come_from_opt POP_JUMP_IF_FALSE JUMP_FORWARD COME_FROM + compare_chained2b_false_37 ::= expr COMPARE_OP come_from_opt POP_JUMP_IF_FALSE JUMP_FORWARD compare_chained2c_37 ::= expr DUP_TOP ROT_THREE COMPARE_OP come_from_opt POP_JUMP_IF_FALSE compare_chained2a_false_37 ELSE @@ -626,6 +628,7 @@ class Python37Parser(Python37BaseParser): list_if ::= expr jmp_false37 list_iter list_iter ::= list_if37 list_if37 ::= compare_chained37 list_iter + list_if37 ::= compare_chained37_false list_iter _ifstmts_jump ::= c_stmts_opt come_froms diff --git a/uncompyle6/semantics/customize37.py b/uncompyle6/semantics/customize37.py index 6edcd7be..db13581b 100644 --- a/uncompyle6/semantics/customize37.py +++ b/uncompyle6/semantics/customize37.py @@ -98,7 +98,7 @@ def customize_for_version37(self, version): (0, 19), (-5, 19), ), - "compare_chained1b_37": ( + "compare_chained1b_false_37": ( ' %[3]{pattr.replace("-", " ")} %p %p', (0, 19), (-4, 19), @@ -109,7 +109,7 @@ def customize_for_version37(self, version): (-2, 19), ), "compare_chained2a_37": ('%[1]{pattr.replace("-", " ")} %p', (0, 19)), - "compare_chained2b_37": ('%[1]{pattr.replace("-", " ")} %p', (0, 19)), + "compare_chained2b_false_37": ('%[1]{pattr.replace("-", " ")} %p', (0, 19)), "compare_chained2a_false_37": ('%[1]{pattr.replace("-", " ")} %p', (0, 19)), "compare_chained2c_37": ( '%[3]{pattr.replace("-", " ")} %p %p',