From 3d732db3cca2c2736bac95450f39b35860de098f Mon Sep 17 00:00:00 2001 From: x0ret Date: Mon, 13 May 2019 19:57:24 +0430 Subject: [PATCH] fix chained compare parse error --- test/bytecode_3.7/01_chained_compare.pyc | Bin 0 -> 769 bytes test/simple_source/bug37/01_chained_compare.py | 7 +++++++ uncompyle6/parsers/parse37.py | 3 +++ uncompyle6/semantics/customize37.py | 3 +++ 4 files changed, 13 insertions(+) create mode 100644 test/bytecode_3.7/01_chained_compare.pyc 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 0000000000000000000000000000000000000000..8a03e344c01094ab1277509c6eab770a303978ec GIT binary patch literal 769 zcmah{&u`OE47Oj=E(=@H&@>GRqzH{kxv(K5xC}J$;($Q|_F&6g%A}1PA=|Y(K}(`9AwSUS0J;{JuEvb|+Bc44=ZAtq-OYzckkuGcdeOIC9umh^Ic8p6G)GOs88b zKh_CIi=D)#p~L!yDx?bI|H6zql6wxbgEx?`%DGl}wN`n-`Zl_u+w`>I&}6V?{83!F faMK8HZ=BIIv5%UOT$8xxdM#OKa0NTqM&JAfh8UC^ literal 0 HcmV?d00001 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)),