diff --git a/test/bytecode_3.7/01_chained_compare.pyc b/test/bytecode_3.7/01_chained_compare.pyc new file mode 100644 index 00000000..8a03e344 Binary files /dev/null and b/test/bytecode_3.7/01_chained_compare.pyc differ diff --git a/test/simple_source/bug37/01_chained_compare.py b/test/simple_source/bug37/01_chained_compare.py index f79f299d..a2347802 100644 --- a/test/simple_source/bug37/01_chained_compare.py +++ b/test/simple_source/bug37/01_chained_compare.py @@ -11,9 +11,16 @@ def chained_compare_b(a, obj): if -0x80000000 <= obj <= 0x7fffffff: return 5 +def chained_compare_c(a, d): + for i in len(d): + if a == d[i] != 2: + return 5 + chained_compare_a(3) try: chained_compare_a(8) except ValueError: pass chained_compare_b(True, 0x0) + +chained_compare_c(3, [3]) diff --git a/uncompyle6/parsers/parse37.py b/uncompyle6/parsers/parse37.py index e9af945a..1d2baa7e 100644 --- a/uncompyle6/parsers/parse37.py +++ b/uncompyle6/parsers/parse37.py @@ -89,6 +89,7 @@ class Python37Parser(Python36Parser): compare_chained37 ::= expr compare_chained1a_37 compare_chained37 ::= expr compare_chained1b_37 compare_chained37_false ::= expr compare_chained1_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 @@ -98,6 +99,8 @@ class Python37Parser(Python36Parser): 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_chained2_false_37 ::= expr DUP_TOP ROT_THREE COMPARE_OP POP_JUMP_IF_FALSE + compare_chained2a_false_37 ELSE POP_TOP JUMP_BACK COME_FROM compare_chained2a_37 ::= expr COMPARE_OP POP_JUMP_IF_TRUE JUMP_FORWARD compare_chained2a_false_37 ::= expr COMPARE_OP POP_JUMP_IF_FALSE JUMP_FORWARD diff --git a/uncompyle6/semantics/customize37.py b/uncompyle6/semantics/customize37.py index b07ea563..71d84dc4 100644 --- a/uncompyle6/semantics/customize37.py +++ b/uncompyle6/semantics/customize37.py @@ -45,6 +45,9 @@ def customize_for_version37(self, version): 'compare_chained1_false_37': ( ' %[3]{pattr.replace("-", " ")} %p %p', (0, 19), (-4, 19)), + 'compare_chained2_false_37': ( + ' %[3]{pattr.replace("-", " ")} %p %p', + (0, 19), (-5, 19)), 'compare_chained1b_37': ( ' %[3]{pattr.replace("-", " ")} %p %p', (0, 19), (-4, 19)),