Merge pull request #236 from x0ret/master

Python 3.7 decompiling full 3.7.3 library without error #235
This commit is contained in:
R. Bernstein
2019-05-13 11:53:07 -04:00
committed by GitHub
5 changed files with 14 additions and 1 deletions

Binary file not shown.

View File

@@ -11,9 +11,16 @@ def chained_compare_b(a, obj):
if -0x80000000 <= obj <= 0x7fffffff: if -0x80000000 <= obj <= 0x7fffffff:
return 5 return 5
def chained_compare_c(a, d):
for i in len(d):
if a == d[i] != 2:
return 5
chained_compare_a(3) chained_compare_a(3)
try: try:
chained_compare_a(8) chained_compare_a(8)
except ValueError: except ValueError:
pass pass
chained_compare_b(True, 0x0) chained_compare_b(True, 0x0)
chained_compare_c(3, [3])

View File

@@ -89,6 +89,7 @@ class Python37Parser(Python36Parser):
compare_chained37 ::= expr compare_chained1a_37 compare_chained37 ::= expr compare_chained1a_37
compare_chained37 ::= expr compare_chained1b_37 compare_chained37 ::= expr compare_chained1b_37
compare_chained37_false ::= expr compare_chained1_false_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
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_chained1_false_37 ::= expr DUP_TOP ROT_THREE COMPARE_OP POP_JUMP_IF_FALSE
compare_chained2c_37 POP_TOP JUMP_FORWARD COME_FROM 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_37 ::= expr COMPARE_OP POP_JUMP_IF_TRUE JUMP_FORWARD
compare_chained2a_false_37 ::= expr COMPARE_OP POP_JUMP_IF_FALSE JUMP_FORWARD compare_chained2a_false_37 ::= expr COMPARE_OP POP_JUMP_IF_FALSE JUMP_FORWARD

View File

@@ -45,6 +45,9 @@ def customize_for_version37(self, version):
'compare_chained1_false_37': ( 'compare_chained1_false_37': (
' %[3]{pattr.replace("-", " ")} %p %p', ' %[3]{pattr.replace("-", " ")} %p %p',
(0, 19), (-4, 19)), (0, 19), (-4, 19)),
'compare_chained2_false_37': (
' %[3]{pattr.replace("-", " ")} %p %p',
(0, 19), (-5, 19)),
'compare_chained1b_37': ( 'compare_chained1b_37': (
' %[3]{pattr.replace("-", " ")} %p %p', ' %[3]{pattr.replace("-", " ")} %p %p',
(0, 19), (-4, 19)), (0, 19), (-4, 19)),

View File

@@ -1439,7 +1439,7 @@ class SourceWalker(GenericASTTraversal, object):
i = n - (len(kwargs)+1) i = n - (len(kwargs)+1)
j = 1 + n - node[n].attr j = 1 + n - node[n].attr
else: else:
start = n-2 i = start = n-2
for i in range(start, 0, -1): for i in range(start, 0, -1):
if not node[i].kind in ['expr', 'call', 'LOAD_CLASSNAME']: if not node[i].kind in ['expr', 'call', 'LOAD_CLASSNAME']:
break break